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

Chapter 5. 変数の修飾子

変数の修飾子は、 変数カスタム関数 や文字列を修飾して出力することができます。修飾子を適用するには、 変数名の後に | (パイプ) と修飾子の名前を指定します。 また、修飾子はその動作に影響を及ぼす追加のパラメータを受け入れる場合もあります。 そのパラメータは修飾子の後に続き、: (コロン) によって区切られます。 また、すべての PHP 関数は、暗黙的に修飾子として使用でき (あとで説明します)、修飾子は 組み合わせる こともできます。

Example 5.1. 修飾子の例


{* 変数に修飾子を適用 *}
{$title|upper}

{* パラメータを持つ修飾子 *}
{$title|truncate:40:"..."}

{* 関数のパラメータに修飾子を適用 *}
{html_table loop=$myvar|upper}

{* パラメータ付き *}
{html_table loop=$myvar|truncate:40:"..."}

{* リテラル文字列に修飾子を適用 *}
{"foobar"|upper}

{* 現在の日付を整形するために date_format を使用 *}
{$smarty.now|date_format:"%Y/%m/%d"}

{* カスタム関数に修飾子を適用 *}
{mailto|upper address="smarty@example.com"}

{* php の str_repeat を使用 *}
{"="|str_repeat:80}

{* php の count *}
{$myArray|@count}

(* 配列全体の大文字変換と切り詰め *}
<select name="name_id">
{html_options output=$my_array|upper|truncate:20}
</select>

  

  • 修飾子は、配列やオブジェクトを含む任意の型の変数に適用することができます。

    Note

    Smarty 3 ではデフォルトの挙動が変わりました。Smarty 2.x の場合は 配列に修飾子を適用するときには "@" を使って {$articleTitle|@count} のようにする必要がありましたが、 Smarty 3 では "@" は不要になり、無視されます。

    配列の個々の要素に対して修飾子を適用したい場合は、 テンプレート内で配列をループさせるか 修飾子関数の中にその機能を組み込まなければなりません。

  • 修飾子は $plugins_dir から自動的に読み込むか、明示的に registerPlugin() 関数で登録します。2つ目の方法は、PHP スクリプトと Smarty テンプレートで 関数を共有する場合などに有用です。

  • 先ほどの例で示したように、全ての PHP 関数は暗黙で修飾子として使用する事ができます。 しかし、修飾子としてPHP関数を使うには2つの小さな落とし穴があります。

    • 第1に、 たまに関数のパラメータの順序が望ましいものではなくります。 $foo{"%2.f"|sprintf:$foo} でフォーマットすることはできますが、 Smarty が提供する方式である {$foo|string_format:"%2.f"} のほうがより直感的です。

    • 第2に、セキュリティが有効な場合、 修飾子として使用される全ての PHP 関数は セキュリティポリシーの $modifiers プロパティで信頼できるものとして定義される必要があります。 詳細は セキュリティ の節を参照ください。

registerPlugin()修飾子の連結 および プラグインによる Smarty の拡張 も参照ください。

capitalize

変数内の全ての単語の先頭を大文字で開始します。 PHP の ucwords() 関数と似ています。

パラメータの位置 必須 デフォルト 概要
1 boolean No FALSE 数字とセットの単語を大文字にするかどうか

Example 5.2. capitalize


<?php

$smarty->assign('articleTitle', 'next x-men film, x3, delayed.');

?>

   

テンプレート


{$articleTitle}
{$articleTitle|capitalize}
{$articleTitle|capitalize:true}

   

出力


next x-men film, x3, delayed.
Next X-Men Film, x3, Delayed.
Next X-Men Film, X3, Delayed.

   

lower および upper も参照してください。