块函数的形式为:{func} .. {/func}。换句话说,它们包含了一个模板块并对该块的内容进行操作。块函数优先于同名的定制函数,也就是说,你不能同时有定制函数{func}以及块函数{func}..{/func}。
缺省情况下,你的函数实现会由Smarty调用两次:一次是开标记,一次是关标记。(以下的$repeat可以改变这个。)
只有块函数的开标记才可以有属性。从模板中所有传递给模板函数的属性都以关联数组的形式放置在$params中。在处理关标记时,也可以存取开标记中的属性。
$content变量的值取决于是在开标记还是在关标记处调用函数。如果是开标记,它将是NULL,如果是关标记,它会是模板块的内容。注意,此时Smarty可能已经处理了模板块,因此你收到的是模板输出,而不是模板源。
参数$repeat以引用方式传递给函数实现,并提供了一种可能性来控制块要显示多少次。缺省时,第一次调用块函数(开标记)时,$repeat为TRUE;而所有之后的块函数调用(关标记)时为FALSE。每次函数实现返回$repeat为TRUE时,包含在{func}...{/func}间的内容会重新求值,参数$content中新的块内容为函数实现再次调用。
如果你嵌套了块函数,可以查出其父块函数是什么。这是通过访问$smarty->_tag_stack变量实现的。只要用var_dump()即可,其结构是很明显的。