What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
{function}
用于在模板内创建函数,这些函数可以像插件函数一样调用。
用这个方式来代替写插件来显示内容,更具有可管理性。
这也可以简化数据的复杂度,如多层结构的菜单。
模板函数是全局的。因为Smarty的编译器是单次编译的,所以必须用
{call}
标签来调用定义在当前模板的函数。
或者你可以直接使用函数,如{funcname ...}
。
{function}
标签必须设置name
属性,
也就是模板函数的名称。
该名称可以用于调用模板函数。
可以按属性的方式传递给模板函数变量默认值。 和PHP函数定义一样,你只可以使用标量值作为默认。 默认值可以被覆盖,当模板函数被调用的时候。
你可以在调用模板函数内使用当前模板的全部变量,在模板内创建或修改的变量就不能被模板函数内访问了。
属性:
参数名称 | 类型 | 必选参数 | 默认值 | 说明 |
---|---|---|---|---|
name | string | Yes | n/a | 模板函数的名称 |
[var ...] | [var type] | No | n/a | 模板函数参数的默认值 |
当模板函数被调用时,你可以传递任意数量的参数给它。除非你需要默认值,否则不要在
{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}