haidarvm / simple-php-template
PHP 简单模板引擎
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-09 02:16:29 UTC
README
一个简单轻量级的PHP模板引擎,使用纯PHP语法。简单模板引擎通过引入块和模板继承来增强PHP的模板功能。
它易于学习,适用于小型网站或与微框架结合使用。
需要PHP版本5.3+
设置
要使用模板引擎,包含 loader.php
,创建一个 Environment
对象,然后渲染!Environment的 render()
函数接受模板的路径,渲染它并返回其内容作为字符串。
//include the loader require_once 'path/to/loader.php'; $env = new SimpleTemplateEngine\Environment('path/to/templates/directory'); echo $env->render('template.php');
您还可以传递一个扩展,它将被追加到Environment中所有模板路径的末尾。
$env = new SimpleTemplateEngine\Environment('path/to/templates', '.php'); //will render index.php echo $env->render('index');
您可以通过数组传递变量到您的模板
//index.php echo $env->render('template.php', ['name'=>$value, 'fruit'=>'banana']);
然后您可以在模板中访问变量 $fruit
,其值将是 apple。
//template.php My favourite fruit is <?php echo $fruit ?>.
Environment可以存储所有模板共享的变量,如助手。设置变量如下
$env->helper = new Helper(); $env->colour = "green";
现在,在您的模板中,您可以使用您的 Helper
对象和您的 colour
变量。
//inside template.php My favourite colour is <?php echo $this->colour ?>. <?php echo $this->helper->doSomething() ?>
块
块是您可以定义并在以后使用的布局部分。您可以通过在 $this->block('name here')
和 $this->endblock()
中包含文本来定义块
<?php $this->block('title') ?> Welcome to my site! <?php $this->endblock() ?> <?php $this->block('title', 'Welcome to my site!'); //shortcut for small blocks
这将创建一个可以稍后通过使用其名称通过 $this
访问的Block对象。例如,要输出上面定义的块
<title><?php echo $this['title'] ?></title>
您还可以使用 if
结构来设置一个默认块,如果未定义块则使用它
<title> <?php if(!$this['title']): ?> Default Title <?php else: echo $this['title']; endif; ?> </title>
输出转义
您可以轻松地转义输出块
echo $this['title']->escape(); // OR this shorthand notation echo $this['title']->e();
endblock
函数返回一个Block对象,您可以通过调用 escape()
来输出。这在结束块后立即转义块非常有用
<?php $this->block() ?> <script>alert('I am dangerous code!');</script> <?php echo $this->endblock()->escape() ?>
如您所见,我们没有为我们的块分配名称,因为我们立即输出它,并且不需要保存它。如果您不为块分配名称,则以后无法访问它。
过滤器
您可以将闭包传递给 endblock
,该闭包将应用于内容。
<?php $this->block() ?> Hello, this is a block of text. <?php echo $this->endblock(function($content) { return strtoupper($content); }); ?>
上面的代码将块的内容转换为大写。
模板继承
块非常有用,因为我们可以在一个模板中定义块,然后 扩展 另一个模板并使用它!这允许我们多次使用具有不同块的模板,如布局。使用 extend
函数扩展模板
<?php $this->extend('layout.php'); ?> <?php $this->block('title', 'My Awesome Page') ?> <?php $this->block('scripts') ?> <script src="jquery.js"></script> <?php $this->endblock() ?> This is my content.
当您扩展父模板时,子模板中的任何非块代码将成为父模板中名为content的特殊块。在上面的代码中,我们定义了一个标题块和一些内容。现在我们可以在扩展的布局中使用它。在layout.php中,我们可以使用 $this['content']
和 $this['title']
输出我们的内容和标题。
<!-- my layout --> <html> <head> <title><?=$this['title'] ?></title> <?=$this['scripts'] ?> </head> <body> <?=$this['content'] ?> </body> </html>
请务必不要将块命名为 content,除非您有意定义一个内容块。如果您定义了内容块,它将附加到布局中的非块内容。
扩展扩展模板的模板:如果父模板扩展了另一个模板,则父模板中的任何非块内容将附加到其子模板的内容块。这个新的内容块将成为祖父模板的内容块。
模板
模板也可以不通过从文件渲染来创建,其块可以在PHP中定义。您可以通过调用Environment的template()
函数来创建一个新的模板对象。
$template = $env->template(); $template->extend('layout.php'); $template['content'] = "hello"; echo $template->render();
请记住,这样创建的模板对象必须有布局,否则将不会渲染任何内容。
就这些!
现在您拥有了创建一个出色网站所需的一切!