haidarvm/simple-php-template

PHP 简单模板引擎

1.0.3 2020-08-08 16:55 UTC

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();

请记住,这样创建的模板对象必须有布局,否则将不会渲染任何内容。

就这些!

现在您拥有了创建一个出色网站所需的一切!