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