什么是 Smarty?
为何使用它?
用例和工作流程
语法比较
模板继承
最佳实践
速成课程
void smarty_block_name( |
$params, | |
$content, | ||
$template, | ||
&$repeat) ; |
array $params
;mixed $content
;object $template
;boolean &$repeat
;块函数是以 {func} .. {/func}
形式存在的函数。换句话说,它们包含一个模板块并在该块的内容上进行操作。块函数优先于同名自定义函数,也就是说,您不能同时拥有自定义函数 {func}
和块函数 {func}..{/func}
。
默认情况下,您的函数实现会被 Smarty 调用两次:一次针对开始标签,一次针对结束标签。(请参阅下面的 $repeat
,了解如何更改此设置。)
从 Smarty 3.1 开始,开始标签调用的返回值也会显示出来。
只有块函数的开始标签才能有属性。从模板传递到模板函数的所有属性都包含在 $params
变量中,作为一个关联数组。处理结束标签时,您的函数也可以访问开始标签属性。
$content
变量的值取决于您的函数是被用于开始标签还是结束标签。对于开始标签,它将是 NULL
,对于结束标签,它将是模板块的内容。请注意,模板块已经由 Smarty 处理过,因此您收到的只是模板输出,而不是模板源。
参数 $repeat
将按引用传递给函数实现,并让其可以控制显示块的次数。默认情况下,在块函数(打开标签)的第一次调用时 $repeat
为 TRUE
,在所有后续的块函数调用(块的关闭标签)中为 FALSE
。每次函数实现返回时如果 $repeat
为 TRUE
,则评估 {func}...{/func}
之间的内容,并使用参数 $content
中的新块内容再次调用函数实现。
如果您有嵌套块函数,则可以通过访问 $smarty->_tag_stack
变量来找出父块函数是什么。对此做 var_dump()
,结构应很明显。
示例 18.5。块函数
<?php /* * Smarty plugin * ------------------------------------------------------------- * File: block.translate.php * Type: block * Name: translate * Purpose: translate a block of text * ------------------------------------------------------------- */ function smarty_block_translate($params, $content, Smarty_Internal_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; } } } ?>