跳至内容

{call}

{call} 用于调用通过 {function} 标签定义的模板函数,就像插件函数一样。

注意

模板函数的定义是全局的。由于 Smarty 编译器是单次编译器,必须使用 {call} 标签才能从给定的模板外部调用模板函数。否则可以直接在模板中将函数用作 {funcname ...}

  • {call} 标签必须具有 name 属性,其中包含模板函数的名称。

  • 变量的值可以用作 属性 传递给模板函数。

属性

属性名称 是否需要 说明
name 模板函数名称
assign 将被调用的模板函数的输出分配到的变量名称
[var ...] 传递给模板函数的局部变量

选项标志

名称 说明
nocache 以无缓存模式调用模板函数

示例

    {* define the function *}
    {function name=menu level=0}
      <ul class="level{$level}">
      {foreach $data as $entry}
        {if is_array($entry)}
          <li>{$entry@key}</li>
          {call name=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 *}
    {call name=menu data=$menu}
    {call menu data=$menu} {* short-hand *}

将生成以下输出

    * item1
    * item2
    * item3
          o item3-1
          o item3-2
          o item3-3
                + item3-3-1
                + item3-3-2
    * item4

另请参阅 {function}