arhone/templating

用于处理模板的库 (PHP 7)

1.0.2 2017-12-21 10:55 UTC

This package is not auto-updated.

Last update: 2024-09-20 20:00:49 UTC


README

原生模板引擎 (PHP 7)

模板引擎旨在方便地分离业务逻辑和展示逻辑。

允许连接模板文件并传递数据。

安装

composer require arhone/templater

<?php

use arhone\templater\Templater;
include 'vendor/autoload.php';

$templater = new Templater();

示例

渲染模板
<?php

echo $templater->render(__DIR__ . '/template/default.tpl', [
    'title' => 'Мой сайт'
]);

template/default.tpl

<?php
/**
 * @var \arhone\templater\TemplaterInterface $this
 * @var string $title Название сайта
 */
?>
<html>
    <title><?=$title?></title>
</html>
指定多个模板

假设你有一个模块,它有一个默认模板,但用户想用自己模板替换。

为了保留原始模板,你可以指定额外模板的路径,如果存在,模板引擎会连接它,如果不存在,则连接标准模板。

<?php

echo $templater->render([
    __DIR__ . '/template/extend/myModule/default.tpl', // Новый
    __DIR__ . '/myModule/template/default.tpl' // Стандартный
]); // Подключиться template/extend/myModule/default.tpl если он существует
使用通用块

这些变量在所有模板中都是可用的。

这允许继承模板并重新定义它们的块。

设置块值
<?php

$templater->body = 'Содержимое';
$templater->set('body', 'Содержимое'); // Тоже самое

echo $templater->body;
向块中添加内容
<?php

$templater->body .= ' продолжение';
$templater->add('body', ' продолжение'); // Тоже самое

echo $templater->body;
获取内容
<?php

echo $templater->body;
echo $templater->get('body'); // Тоже самое
删除内容
<?php

$templater->body = null;
$templater->delete('body'); // Тоже самое
unset($templater->body); // Тоже самое
设置默认值
<?php
/**
 * @var \arhone\templater\TemplatingInterface $this
 */
?>
<html>
    <title><?=$this->title ?? 'Заголовок'?></title>
    <body>
    <?php $this->default('body')?>
        <div>Содержимое</div>
    <?=$this->end('body')?>
    </body>
</html>

默认方法添加默认值,如果未设置属性,则使用此值。

<?php

$templater->body = 'Значение';
$templater->default('body', 'По умолчанию');
echo $templater->body; // Выведет "Значение"
<?php

$templater->body = 'Значение';
$templater->default('body', 'По умолчанию');
unset($templater->body);
echo $templater->body; // Выведет "По умолчанию"

这样就可以重新定义标准模板的块

<?php

echo $templater->render(__DIR__ . '/slave.tpl');
<?php
/**
 * Шаблон slave.tpl
 * @var \arhone\templater\TemplatingInterface $this
 */
?>

<?php $this->set('body')?>
    <div>Содержимое</div>
<?php $this->end('body')?>

<?=$this->render(__DIR__ . '/default.tpl')?>
<?php
/**
 * Шаблон default.tpl
 * @var \arhone\templater\TemplatingInterface $this
 */
?>

<?php $this->default('body')?>
    Значение по умолчанию
<?=$this->end('body')?>
htmlspecialchars() 有例外

当需要只允许绘制一些 HTML 标签时,例如 p 或 code

<?php
/**
 * @var \arhone\templater\TemplatingInterface $this
 */
?>

<?php $this->add('body')?>

    <strong>strong</strong>
    <b>b</b>
    <p>p</p>
    <div class="test">div</div>
    <img src="" alt="img">
    <code class="html"><div>div</div></code>

<?=$this->specialChars($this->end('body'), [
    'strong',
    'p',
    'img' => ['src', 'alt'],
    'code' => ['class']
])?>

其余的用 PHP 处理吧 :)