変数の修飾子 - PHPプロ!マニュアル

Smartyマニュアル

- 変数の修飾子

第 5章変数の修飾子

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

例 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 の ucfirst() 関数と似ています。

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

例 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 も参照してください。

閲覧履歴



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)

Q&A掲示板 新着情報