Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

{function}

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

Note

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

  • {function} タグには name 属性が必須です。 ここに、テンプレート関数の名前を書きます。 この名前のタグを使って、テンプレート関数をコールすることができます。

  • 属性 を使って、テンプレート関数に変数のデフォルト値を渡すことができます。 デフォルト値は、テンプレート関数をコールするときに上書きすることができます。

  • テンプレート関数からは、呼び出し元テンプレートのすべての変数を使うことができます。 テンプレート関数内での変数の値の変更や新たな変数の作成はローカルスコープで行われ、 テンプレート関数の実行後は呼び出し元テンプレートからは見えなくなります。

属性

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

Example 7.41. 再帰的なメニュー {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} も参照ください。