変数の修正子
- capitalize
- count_characters
- cat
- count_paragraphs
- count_sentences
- count_words
- date_format
- default
- escape
- indent
- lower
- nl2br
- regex_replace
- replace
- spacify
- string_format
- strip
- strip_tags
- truncate
- upper
- wordwrap
変数の修正子は、変数やカスタム関数や文字列を修飾して出力するための修正子です。これを用いるには、変数名の後に |(パイプ)と修正子の名前を指定します。
また、修正子はその動作に影響を及ぼす追加のパラメータを 受け入れる場合もあります。そのパラメータは修正子の後に続き、:(コロン)によって分けられます。
また、修正子はその動作に影響を及ぼす追加のパラメータを 受け入れる場合もあります。そのパラメータは修正子の後に続き、:(コロン)によって分けられます。
例 5-1. 変数の修正子の例
{* $titleを大文字で表示する *}
<h2>{$title|upper}</h2>
{* $topicを40文字で切り捨て、終端に"..."をつけて表示 *}
Topic: {$topic|truncate:40:"..."}
{* リテラル文字列によって整形する *}
{"now"|date_format:"%Y/%m/%d"}
{* カスタム関数に修正子を適用する *}
{mailto|upper address="me@domain.dom"}
配列に対して修正子を用いた場合は、その配列に格納された全ての値に影響を及ぼします。
配列全体を1つの値として作用させるには修正子の先頭に@記号をつける必要があります。
配列全体を1つの値として作用させるには修正子の先頭に@記号をつける必要があります。
(例) {$articleTitle|@count} (配列$articleTitleの要素数を出力します)
修正子は $plugins_dir から自動的に読み込むか(参照: 命名規約)、明示的に登録する事が可能です(参照: register_modifier?)。
さらに全てのphp関数は暗黙で修正子として 使用する事ができます(前述の @count の例では、Smartyの修正子ではなくphpのcount?関数を使用する)。
さらに全てのphp関数は暗黙で修正子として 使用する事ができます(前述の @count の例では、Smartyの修正子ではなくphpのcount?関数を使用する)。
修正子としてphp関数を使うには2つの小さな落とし穴があります。
第1: たまに関数のパラメータの順序が 望ましいものではなくなる
({"%2.f"|sprintf:$float} は実際に動作するが、Smartyによって提供される {$float|string_format:"%2.f"} のほうがより分かりやすい)。
第2: $security が有効な場合、修正子として使用される全てのphp関数は $security_settings['MODIFIER_FUNCS']? 配列内で 信頼できるものとして定義される必要があるということ。
第1: たまに関数のパラメータの順序が 望ましいものではなくなる
({"%2.f"|sprintf:$float} は実際に動作するが、Smartyによって提供される {$float|string_format:"%2.f"} のほうがより分かりやすい)。
第2: $security が有効な場合、修正子として使用される全てのphp関数は $security_settings['MODIFIER_FUNCS']? 配列内で 信頼できるものとして定義される必要があるということ。