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; } } ?>