Блоковые функцииvoid smarty_block_namearray $paramsmixed $contentobject &$smartyboolean &$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().
Блоковая функция
]]>