Get Smarty

Donate

Paypal

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}

{* php の shuffle をサーバの ip に対して使用 *}
{$smarty.server.SERVER_ADDR|shuffle}

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

  

  • 配列に対して修飾子を用いた場合は、その配列に格納された全ての値に影響を及ぼします。 配列全体を1つの値として作用させるには修飾子の先頭に @ 記号をつける必要があります。

    {$articleTitle|@count} - これは、 配列 $articleTitle の要素数を、php の count() 関数を修飾子として用いて出力します。

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

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

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

    • 第2に、 $security が有効な場合、 修飾子として使用される全ての PHP 関数は $security_settings 配列の MODIFIER_FUNCS 要素で 信頼できるものとして定義される必要があります。

register_modifier()修飾子の連結 および プラグインによる 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 も参照してください。

Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors