Skip to content

{call}

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

注意

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

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

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

属性

属性名称 是否必须 描述
name 模板函数的名称
assign 被调用的模板函数的输出将被赋值给的变量名称
[var ...] 传递给模板函数的局部变量

选项标志

名称 描述
nocache 以 nocache 模式调用模板函数

示例

    {* 定义函数 *}
    {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}

    {* 创建一个数组进行演示 *}
    {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
    ['item3-3-1','item3-3-2']],'item4']}

    {* 通过函数运行数组 *}
    {call name=menu data=$menu}
    {call menu data=$menu} {* 简写 *}

将生成以下输出

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

参见 {function}.