{call}
は、
{function}
タグで定義したテンプレート関数をプラグイン関数のようにコールします。
Note
テンプレート関数はグローバルに定義されます。Smarty のコンパイラはシングルパスのコンパイラなので、
指定したテンプレートの外部で定義されたテンプレート関数をコールするときには
{call}
タグを使わなければなりません。それ以外の場合は、テンプレート内で直接
{funcname ...}
として関数を使うことができます。
{call}
タグにはname
属性が必須です。 ここに、テンプレート関数の名前を書きます。属性 を使って、テンプレート関数に変数として値を渡すことができます。
属性
属性名 | 型 | 必須 | デフォルト | 概要 |
---|---|---|---|---|
name | string | Yes | n/a | テンプレート関数の名前 |
assign | string | No | n/a | コールしたテンプレート関数の出力を代入する変数の名前 |
[var ...] | [var type] | No | n/a | ローカルからテンプレート関数に渡す変数 |
オプションのフラグ
名前 | 概要 |
---|---|
nocache | テンプレート関数を nocache モードでコールする |
Example 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}
も参照ください。