Table of Contents
変数の修飾子は、
変数 や
カスタム関数
や文字列を修飾して出力することができます。修飾子を適用するには、
変数名の後に |
(パイプ) と修飾子の名前を指定します。
また、修飾子はその動作に影響を及ぼす追加のパラメータを受け入れる場合もあります。
そのパラメータは修飾子の後に続き、:
(コロン) によって区切られます。
また、すべての 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 の拡張
も参照してください。
変数内の全ての単語の先頭を大文字で開始します。
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.