{function} 模板函数
{function}用于在模板内创建函数,这些函数可以像插件函数一样调用。 用这个方式来代替写插件来显示内容,更具有可管理性。 这也可以简化数据的复杂度,如多层结构的菜单。
{function}标签必须设置fn属性, 也就是模板函数的名称。 该名称可以用于调用模板函数。
可以按属性的方式传递给模板函数变量默认值。 和javascript函数定义一样,你只可以使用标量值作为默认。 默认值可以被覆盖,当模板函数被调用的时候。
你可以在调用模板函数内使用当前模板的全部变量,在模板内使用{assign}创建或修改的变量就不能被模板函数内访问了。
{function} 定义的函数 必须 使用 {call} 标签来调用执行.
参数名 | 类型 | 必需 | 说明 |
---|---|---|---|
fn | sting | Yes | 函数名称 |
var…. | any | No | 参数值定义 |
{* this will print literal delimiters out of the template *}
{assign var=list value=[
['name'=>'目录1','items'=>[['name'=>'目录1-导航1'],['name'=>'目录1-导航2'],['name'=>'目录1-导航3']]],
['name'=>'目录2','items'=>[['name'=>'目录2-导航1'],['name'=>'目录2-导航2'],['name'=>'目录2-导航3']]]
]}
{function fn=menu data=[] level=0}
<ul class="level{$level}">
{foreach from=$data item=entry}
{if isset($entry.items)}
<li>{$entry.name}</li>
{* 递归调用 *}
{call fn=menu data=$entry.items level=$level+1}
{else}
<li>{$entry.name}</li>
{/if}
{/foreach}
</ul>
{/function}
//调用函数-----------
{call fn=menu data=$list}