{function}
{function}
用于在模板内创建函数,这些函数可以像插件函数一样调用。 用这个方式来代替写插件来显示内容,更具有可管理性。 这也可以简化数据的复杂度,如多层结构的菜单。
Note
模板函数是全局的。因为Smarty的编译器是单次编译的,所以必须用 {call}
标签来调用定义在当前模板的函数。 或者你可以直接使用函数,如{funcname …}
。
{function}
标签必须设置name
属性,也就是模板函数的名称。该名称可以用于调用模板函数。可以按属性的方式传递给模板函数变量默认值。 和PHP函数定义一样,你只可以使用标量值作为默认。 默认值可以被覆盖,当模板函数被调用的时候。
你可以在调用模板函数内使用当前模板的全部变量,在模板内创建或修改的变量就不能被模板函数内访问了。
属性:
参数名称 | 类型 | 必选参数 | 默认值 | 说明 |
---|---|---|---|---|
name | string | Yes | n/a | 模板函数的名称 |
[var …] | [var type] | No | n/a | 模板函数参数的默认值 |
Note
当模板函数被调用时,你可以传递任意数量的参数给它。除非你需要默认值,否则不要在 {funcname …}
标签内定义参数。 默认值必须是标量而且不是变量,变量必须在函数调用时才能传递。
Example 7.43. 递归菜单 {function} 例子
- {* define the function *}
- {function name=menu level=0}
- {function menu level=0} {* short-hand *}
- <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}
- {* create an array to demonstrate *}
- {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
- ['item3-3-1','item3-3-2']],'item4']}
- {* run the array through the function *}
- {menu data=$menu}
输出:
- * item1
- * item2
- * item3
- o item3-1
- o item3-2
- o item3-3
- + item3-3-1
- + item3-3-2
- * item4
参见 {call}
原文: https://www.smarty.net/docs/zh_CN/language.function.function.tpl