{call}

{call} は、 {function} タグで定義したテンプレート関数をプラグイン関数のようにコールします。

注意

テンプレート関数はグローバルに定義されます。Smarty のコンパイラはシングルパスのコンパイラなので、 指定したテンプレートの外部で定義されたテンプレート関数をコールするときには {call} タグを使わなければなりません。それ以外の場合は、テンプレート内で直接 {funcname ...} として関数を使うことができます。

属性

属性名 必須 デフォルト 概要
name string Yes n/a テンプレート関数の名前
assign string No n/a コールしたテンプレート関数の出力を代入する変数の名前
[var ...] [var type] No n/a ローカルからテンプレート関数に渡す変数

オプションのフラグ

名前 概要
nocache テンプレート関数を nocache モードでコールする

例 7.20. 再帰的なメニューの例


{* 関数の定義 *}
{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} も参照ください。