自定义块标签
区块标记是格式为 {func} .. {/func}
的标记。换句话说,它们包含一个模版区块,并操作该区块的内容。
如果名称相同的正常标记和区块功能同时存在,则区块功能优先,也就是说,你不能同时拥有自定义标记 {func}
和区块标记 {func}..{/func}
。
-
默认情况下,你的功能实现由 Smarty 调用两次:一次是针对起始标记,一次是针对结束标记。(请参阅下文
$repeat
了解如何更改此设置。) -
只有区块的起始标记有属性。所有属性都包含在关联数组
$params
变量中。当处理结束标记时,也可以使用你的功能读到起始标记的属性。 -
$content
变量的值取决于你的功能是针对起始标记还是结束标记被调用的。如果是针对起始标记调用,则值为 NULL;如果是针对结束标记调用,则为模版区块的内容。请注意,模版区块将已被 Smarty 处理,因此你只收到模版的输出,而不是模版的源代码。 -
参数
$repeat
按引用传递给函数实现,并为其提供控制块显示次数的一种可能性。默认情况下,在块函数(起始标签)的第一次调用中,$repeat
为 TRUE,在块函数(块的结束标签)的所有后续调用中为 FALSE。每当函数实现返回时,$repeat
为 TRUE,则会评估{func}...{/func}
之间的内容,并使用参数$content
中的新块内容再次调用函数实现。
示例
<?php
function smarty_block_translate($params, $content, \Smarty\Template $template, &$repeat) {
// only output on the closing tag
if (!$repeat){
if (isset($content)) {
$lang = $params['lang'];
// do some intelligent translation thing here with $content
return $translation;
}
}
}
$smarty->registerPlugin(Smarty\Smarty::PLUGIN_BLOCK, 'translate', 'smarty_block_translate');
现在可以在模板中使用如下所示