diff --git a/docs/ru/ext/extend.md b/docs/ru/ext/extend.md index 4c6b33c..30e7a80 100644 --- a/docs/ru/ext/extend.md +++ b/docs/ru/ext/extend.md @@ -6,61 +6,72 @@ В шаблонизаторе принято различать два типа тегов: _компиляторы_ и _функции_. Компиляторы вызываются во время преобразования кода шаблона в PHP код и возвращяют PHP код который будет вставлен вместо тега. А функции вызываются непременно в момент выполнения шаблона и возвращают непосредственно данные которые будут отображены. -Среди тегов как и в HTML есть строчные и блоковые теги. +Среди тегов, как и в HTML, есть строчные и блоковые теги. ## Линейные функции -Примитивное добавление функции можно осуществить следующим образом: +Добавление функции можно осуществить следующим образом: ```php $fenom->addFunction(string $function_name, callable $callback[, callable $parser]); ``` -В данном случае запускается стандартный парсер, который автоматически разберет аргументы тега, которые должны быть в формате HTML атрибутов и отдаст их в функцию ассоциативным массивом: +В данном случае запускается стандартный парсер, который автоматически разберет аргументы тега (которые должны быть в формате 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); +$fenom->addFunctionSmart(string $function_name, callable $callback); ``` В данном случае парсер сканирует список аргументов коллбека и попробует сопоставить с аргументами тега. ```php -// ... class XYCalcs .. -public static function calc($x, $y = 5) { /* ... */} +class XYCalcs { + public static function calc($x, $y = 5) { + return $x + $y; + } +} // ... $fenom->addFunctionSmart('calc', 'XYCalcs::calc'); ``` -пример выше позволяет объявить тег `{calc}` и спользовать его: + +пример выше позволяет объявить тег `{calc}` и использовать его: + ```smarty {calc x=$top y=50} или {calc y=50 x=$top} вызовет XYCalcs::calc($top, 50) {calc x=$top} или {calc $top} вызовет XYCalcs::calc($top) ``` -Таким образом вы успешно можете добавлять Ваши функции или методы. + +Таким образом Вы легко можете добавлять свои функции или методы. ## Блоковые функции -Добавление блоковой функции аналогичен добавлению строковой за исключением того что есть возможность указать парсер для закрывающего тега. +Добавление блоковой функции аналогично добавлению строковой, за исключением того, что есть возможность указать парсер для закрывающего тега. ```php $fenom->addBlockFunction(string $function_name, callable $callback[, callable $parser_open[, callable $parser_close]]); ``` Сам коллбек принимает первым аргументом контент между открывающим и закрывающим тегом, а вторым аргументом - ассоциативный массив из аргуметов тега: + ```php -$fenom->addBlockFunction('some_block_function', function (array $params, $content) { /* ... */}); +$fenom->addBlockFunction('some_block_function', function ($content, array $params) { /* ... */ }); ``` ## Линейный компилятор -Добавление строчного компилятора осуществляеться очень просто: +Добавление строчного компилятора осуществляется очень просто: ```php $fenom->addCompiler(string $compiler, callable $parser); @@ -73,17 +84,18 @@ $fenom->addCompiler(string $compiler, callable $parser); $fenom->addCompilerSmart(string $compiler, $storage); ``` -`$storage` может быть как классом так и объектом. В данном случае шаблонизатор будет искать метод `tag{$compiler}`, который будет взят в качестве парсера тега. +`$storage` может быть как именем класса, так и объектом. В данном случае шаблонизатор будет искать метод `tag{$compiler}` и взят в качестве парсера тега. ## Блоковый компилятор -Добавление блочного компилятора осуществяется двумя способами. Первый +Добавление блочного компилятора осуществяется двумя способами. Первый: ```php $fenom->addBlockCompiler(string $compiler, array $parsers, array $tags); ``` где `$parser` ассоциативный массив `["open" => parser, "close" => parser]`, сождержащий парсер на открывающий и на закрывающий тег, а `$tags` содержит список внутренних тегов в формате `["tag_name"] => parser`, которые могут быть использованы только с этим компилятором. + Второй способ добавления парсера через импортирование из класса или объекта методов: ```php @@ -107,7 +119,8 @@ $fenom->addModifier(string $modifier, callable $callback); ```php $fenom->addModifier('my_modifier', function ($variable, $param1, $param2) { - // ... + // изменение $variable + return $variable; }); ``` @@ -116,19 +129,20 @@ $fenom->addModifier('my_modifier', function ($variable, $param1, $param2) { ```php $fenom->addTest(string $name, string $code); ``` -`$code` - PHP код для условия, с маркером для замены на значение или переменную. + +`$code` - PHP код для условия с маркером для замены на значение или переменную. Например, тест на целое число `is int` можно добавить как `$fenom->addTest('int', 'is_int(%s)')`. -В шаблоне тесты выглядит как `{$a is int}`, а после компиляции выглядит приблизительно так - `is_int($a)`. +В шаблоне тест выглядит как `{$a is int}`, а после компиляции - `is_int($a)`. # Расширение глобальной переменной Fenom обладает определенным [набором глобальных переменных](../syntax.md#Системная-переменная). -Однако их может не хватать для удобной работы и в этом случае потребуется добавить свои или переопределить/удалить существующие. +Однако, их может не хватать для удобной работы и в этом случае потребуется добавить свои или переопределить/удалить существующие. Метод `Fenom::addAccessor(string $name, callable $parser)` позволяет добавить свой обработчик-парсер `$parser`, который будет вызван при встрече с глобальной переменной `$name` **во время компиляции шаблона**. ```php -$fenom->addAccessor('project', function (Fenom\Tokenizer $tokens) { /* code */ }); +$fenom->addAccessor('project', function (Fenom\Tokenizer $tokens) { /* ... */ }); ``` Указанный вторым аргументом, парсер будет вызван при встречи компилятором конструкции `$.project`. @@ -158,30 +172,38 @@ $fenom->addAccessor('project', function (Fenom\Tokenizer $tokens) { /* code */ } "support" => 'support@example.ru' ]; ``` + В шаблоне появится глобальная переменная `$.site`: + ```smarty