Templater
Нативный шаблонизатор (PHP 7), (*1)
Шаблонизатор предназначен для удобного разделения бизнес логики и логики представления., (*2)
Позволяет подключать файлы шаблонов и передавать в них готовые данные., (*3)
Установка
composer require arhone/templater
, (*4)
render(__DIR__ . '/template/default.tpl', [
'title' => 'Мой сайт'
]);
```
template/default.tpl:
```php
<html>
<title><?=$title?></title>
</html>
Указание нескольких шаблонов
Допустим у вас есть модуль, у него есть шаблон по умолчанию, но пользователь хочет заменить его своим шаблоном., (*5)
Что бы сохранить исходный шаблон, вы можете указать путь к дополнительному шаблону, если он существует, то шаблонизатор подключит его, если нет, то подключиться стандартный., (*6)
render([
__DIR__ . '/template/extend/myModule/default.tpl', // Новый
__DIR__ . '/myModule/template/default.tpl' // Стандартный
]); // Подключиться template/extend/myModule/default.tpl если он существует
```
##### Использование общих блоков
Такие переменные доступны во всех шаблонах.
Это позволяет наследовать шаблоны и переопределять их блоки.
###### Установка значения блока
```php
body = 'Содержимое';
$templater->set('body', 'Содержимое'); // Тоже самое
echo $templater->body;
```
###### Дописывание содержимого в блок
```php
body .= ' продолжение';
$templater->add('body', ' продолжение'); // Тоже самое
echo $templater->body;
```
###### Получение содержимого
```php
body;
echo $templater->get('body'); // Тоже самое
```
###### Удаление содержимого
```php
body = null;
$templater->delete('body'); // Тоже самое
unset($templater->body); // Тоже самое
```
###### Установка значения по умолчанию
```php
<html>
<title><?=$this->title ?? 'Заголовок'?></title>
<body>
<?php $this->default('body')?>
<div>Содержимое</div>
<?=$this->end('body')?>
</body>
</html>
Метод default добавляет значение по умолчанию, это значение будет использовано в случае если свойство не было задано., (*7)
body = 'Значение';
$templater->default('body', 'По умолчанию');
echo $templater->body; // Выведет "Значение"
```
```php
body = 'Значение';
$templater->default('body', 'По умолчанию');
unset($templater->body);
echo $templater->body; // Выведет "По умолчанию"
```
Таким образом можно переопределять блоки стандартных шаблонов
```php
render(__DIR__ . '/slave.tpl');
```
```php
set('body')?>
<div>Содержимое</div>
end('body')?>
=$this->render(__DIR__ . '/default.tpl')?>
default('body')?>
Значение по умолчанию
=$this->end('body')?>
htmlspecialchars() с исключениями
Когда нужно разрешить отрисовывать только некоторые html теги, например p или code, (*8)
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 :), (*9)