What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
void smarty_block_name( |
$params, | |
$content, | ||
&$smarty, | ||
&$repeat) ; |
array $params
;mixed $content
;object &$smarty
;boolean &$repeat
;Блоковые функции выглядят следующим образом: {func} .. {/func}. Другими словами, они заключены в определенном блоке шаблона и оперируют содержимым этого блока. Блоковые функции имеют приоритет перед пользовательскими функциями, имеющими то же имя, поэтому, вы не сможете использовать одновременно свои функции вида {func} и блоковые функции {func} .. {/func}.
Smarty вызывает ваши функции дважды: первый раз при открытии тэга и второй раз при закрытии тэга.
Только открывающий тэг блоковой функции может иметь атрибуты. Все
атрибуты, переданные в функцию из шаблона сохраняются
в $params
в виде ассоциативного массива. Вы можете
получить прямой доступ к их значениям:
$params['start']
или использовать
extract($params)
для импорта.
Атрибуты, переданные в открывающем тэге доступны для вашей функции
до обработки закрывающего тэга включительно.
Значение переменной $content
зависит от того,
вызывается ли ваша функция для открывающего тэга или вызов происходит при закрытии тэга.
В случае с открывающим тэгом, это значение будет равно null
, а в случае
закрывающего тэга, значение будет равно содержимому блока в шаблоне.
Заметьте, что этот блок шаблона уже будет обработан
Smarty и на выводе вы получите результат обработки, а не
исходный код шаблона.
Параметр &$repeat
передается по
ссылке в функцию и дает ей возможность контролировать
количество отображений блока.
По умолчанию $repeat
равен true
во время первого вызова блоковой функции (открывающий тэг блока)
и false
при всех последующих вызовах блоковой функции
(закрывающий тэг блока).
Каждый раз, когда ваша функция возвращает параметр &$repeat
равный true
, содержимое между
{func} .. {/func} обрабатывается и ваша функция вновь вызывается, причем новое содержимое
блока передается в параметре $content
.
Если вы используете вложенные блоковые функции, есть возможность определять родительские
блоковые функции. Достаточно получить значение переменной
$smarty->_tag_stack
. Затем останется только применить var_dump()
для нее и структура будет видна.
Смотрите также: register_block(), unregister_block().
Example 16.5. Блоковая функция
<?php /* * Smarty plugin * ------------------------------------------------------------- * Файл: block.translate.php * Тип: block * Имя: translate * Назначение: перевести блок (кусок) текста * ------------------------------------------------------------- */ function smarty_block_translate($params, $content, &$smarty) { if ($content) { $lang = $params['lang']; // здесь выполнить интеллектуальный перевод строки $content echo $translation; } } ?>