mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
91 lines
4.9 KiB
Markdown
91 lines
4.9 KiB
Markdown
|
Tags [RU]
|
|||
|
=========
|
|||
|
|
|||
|
В шаблонизаторе принято различать два типа тегов: _компиляторы_ и _функции_.
|
|||
|
Компиляторы вызываются во время преобразования кода шаблона в PHP код и возвращяю PHP код который будет вставлен вместо тега.
|
|||
|
А функции вызываются непременно в момент выполнения шаблона и возвращают непосредственно данные которые будут отображены.
|
|||
|
Среди тегов как и в HTML есть строчные и блоковые теги.
|
|||
|
|
|||
|
## Inline function
|
|||
|
|
|||
|
Примитивное добавление функции можно осуществить следующим образом:
|
|||
|
|
|||
|
```php
|
|||
|
$fenom->addFunction(string $function_name, callable $callback[, callable $parser]);
|
|||
|
```
|
|||
|
|
|||
|
В данном случае запускается стандартный парсер, который автоматически разберет аргументы тега, которые должны быть в формате HTML аттрибутов и отдаст их в функцию ассоциативным массивом:
|
|||
|
```php
|
|||
|
$fenom->addFunction("some_function", function (array $params) { /* ... */ });
|
|||
|
```
|
|||
|
При необходимости можно переопределить парсер на произвольный:
|
|||
|
```php
|
|||
|
$fenom->addFunction("some_function", $some_function, function (Fenom\Tokenizer $tokenizer, Fenom\Template $template) { /* parse tag */});
|
|||
|
```
|
|||
|
Существует более простой способ добавления произвольной функции:
|
|||
|
|
|||
|
```php
|
|||
|
$fenom->addFunctionSmarty(string $function_name, callable $callback);
|
|||
|
```
|
|||
|
|
|||
|
В данном случае парсер сканирует список аргументов коллбека и попробует сопоставить с аргументами тега.
|
|||
|
|
|||
|
```php
|
|||
|
// ... class XYCalcs ..
|
|||
|
public static function calc($x, $y = 5) { /* ... */}
|
|||
|
// ...
|
|||
|
$fenom->addFunctionSmart('calc', 'XYCalcs::calc');
|
|||
|
```
|
|||
|
then
|
|||
|
```smarty
|
|||
|
{calc x=$top y=50} or {calc y=50 x=$top} is XYCalcs::calc($top, 50)
|
|||
|
{calc x=$top} or {calc $top} is XYCalcs::calc($top)
|
|||
|
```
|
|||
|
Таким образом вы успешно можете добавлять Ваши функции или методы.
|
|||
|
|
|||
|
## Block function
|
|||
|
|
|||
|
Добавление блоковой функции аналогичен добавлению строковой за исключением того что есть возможность указать парсер для закрывающего тега.
|
|||
|
|
|||
|
```php
|
|||
|
$fenom->addBlockFunction(string $function_name, callable $callback[, callable $parser_open[, callable $parser_close]]);
|
|||
|
```
|
|||
|
|
|||
|
Сам коллбек принимает первым аргументом контент между открывающим и закрывающим тегом, а вторым аргументом - ассоциативный массив из аргуметов тега:
|
|||
|
```php
|
|||
|
$fenom->addBlockFunction('some_block_function', function ($content, array $params) { /* ... */});
|
|||
|
```
|
|||
|
|
|||
|
## Inline compiler
|
|||
|
|
|||
|
Добавление строчного компилятора осуществляеться очень просто:
|
|||
|
|
|||
|
```php
|
|||
|
$fenom->addCompiler(string $compiler, callable $parser);
|
|||
|
```
|
|||
|
|
|||
|
Парсер должен принимать `Fenom\Tokenizer $tokenizer`, `Fenom\Template $template` и возвращать PHP код.
|
|||
|
Компилятор так же можно импортировать из класса автоматически
|
|||
|
|
|||
|
```php
|
|||
|
$fenom->addCompilerSmart(string $compiler, $storage);
|
|||
|
```
|
|||
|
|
|||
|
`$storage` может быть как классом так и объектом. В данном случае шаблонизатор будет искать метод `tag{$compiler}`, который будет взят в качестве парсера тега.
|
|||
|
|
|||
|
## Block compiler
|
|||
|
|
|||
|
Добавление блочного компилятора осуществяется двумя способами. Первый
|
|||
|
|
|||
|
```php
|
|||
|
$fenom->addBlockCompiler(string $compiler, array $parsers, array $tags);
|
|||
|
```
|
|||
|
|
|||
|
где `$parser` ассоциативный массив `["open" => parser, "close" => parser]`, сождержащий парсер на открывающий и на закрывающий тег, а `$tags` содержит список внутренних тегов в формате `["tag_name"] => parser`, которые могут быть использованы только с этим компилятором.
|
|||
|
Второй способ добавления парсера через импортирование из класса или объекта методов:
|
|||
|
|
|||
|
```php
|
|||
|
$fenom->addBlockCompilerSmart(string $compiler, $storage, array $tags, array $floats);
|
|||
|
```
|
|||
|
|