{function}
{function} 用于在模板中创建函数并像插件函数一样调用它们。与编写生成表现内容的插件相比,将其保留在模板中通常是更易管理的选择。它还简化了数据遍历,例如深度嵌套的菜单。
注意
模板函数是全局定义的。由于 Smarty 编译器是单通道编译器,
{call}标签必须用于调用在给定模板外部定义的模板函数。否则,你可以在模板中直接使用{funcname ...}来使用函数。
属性
| 属性名称 | 是否必须 | 描述 |
|---|---|---|
| name | 是 | 模板函数的名称 |
| [var ...] | 否 | 传递给模板函数的默认变量值 |
-
{function}标签必须有name属性,该属性包含模板函数的名称。可以使用这个名称的标签来调用模板函数。 -
默认的变量值可以作为属性传递给模板函数。就像在 PHP 函数声明中,你只能使用标量值作为默认值。当调用模板函数时,可以覆盖默认值。
-
你可以在模板函数内部使用调用模板中的所有变量。在模板函数内部对变量的更改或新创建的变量具有局部作用域,并且在模板函数执行后在调用模板中不可见。
注意
当调用模板函数时,你可以传递任意数量的参数。参数变量不必在
{funcname ...}标签中声明,除非你要使用默认值。默认值必须是标量,不能是变量。在调用模板时必须传递变量。
示例
{* 定义函数 *}
{function name=menu level=0}
{function menu level=0} {* 简写 *}
<ul class="level{$level}">
{foreach $data as $entry}
{if is_array($entry)}
<li>{$entry@key}</li>
{menu data=$entry level=$level+1}
{else}
<li>{$entry}</li>
{/if}
{/foreach}
</ul>
{/function}
{* 创建一个数组进行演示 *}
{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
['item3-3-1','item3-3-2']],'item4']}
{* 通过函数运行数组 *}
{menu data=$menu}
将生成以下输出
* item1
* item2
* item3
o item3-1
o item3-2
o item3-3
+ item3-3-1
+ item3-3-2
* item4
另请参见 {call}