{function}

{function} は、テンプレート内で関数を作成します。 これはプラグイン関数のようにコールすることができます。 見た目に関する内容を生成するプラグインを書くよりは、 それをテンプレート側に書いておいたほうが管理しやすくなるでしょう。 深く込み入ったメニューなどのデータの取り回しもシンプルになります。

注意

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

属性

属性名 必須 デフォルト 概要
name string Yes n/a テンプレート関数の名前
[var ...] [var type] No n/a ローカルからテンプレート関数に渡すデフォルトの変数の値

注意

任意の数のパラメータをテンプレート関数に渡せます。 パラメータ変数は {funcname ...} タグの中で宣言してはいけません。 ただし、デフォルト値を使いたい場合は別です。 デフォルト値はスカラーでないといけません。変数にはできません。 また、変数はテンプレートを呼ぶときに渡さないといけません。

例 7.43. 再帰的なメニュー {function} の例


{* 関数の定義 *}
{function name=menu level=0}
{function menu level=0}          {* 短縮形 *}
  <ul class="level{$level}">
  {foreach $data as $entry}
    {if is_array($entry)}
      <li>{$entry@key}</li>
      {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']}

{* 配列を関数に渡します *}
{menu data=$menu}

  

出力は、次のようになります。


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

  

{call} も参照ください。