第9回 Smartyの便利な機能を使いこなす(その3:フィルタ編) - Smarty講座
yossy先生のSmarty講座
Lecutures on PHP
第9回 Smartyの便利な機能を使いこなす(その3:フィルタ編) (その1)

既に年明けから2週間ほど過ぎてしまいましたが、今年最初の記事ということで……
明けましておめでとうございます。2009年も引き続きよろしくお願いいたします。
さて今回はフィルタについて説明したいと思います。
Smartyの処理の流れとフィルタ
さてその前に、Smartyの処理の流れについてざっと説明したいと思います。
Smartyテンプレートを作成し、それを表示させるにはdisplay()メソッドやfetch()メソッドにテンプレートファイルを渡し、実行しますが、これらのメソッドの中では以下の図のような流れで処理が行われます。

いきなりテンプレートファイルから出力結果を生成するのではなく、テンプレートファイルを解析してPHPのコードに変換し、そのコードを実行することで最終的に出力結果を生成する、というように、段階を踏んで処理を行っています。
そして、このテンプレートを解析する、結果を出力するといった処理の前後にテンプレートだけでは書けないような処理の実行結果を追加したり、テンプレートの内容を書き換えるなどの独自の処理を追加することが出来ます。
これが「フィルタ」という機能です。
Smartyのフィルタには以下の3種類があります。
- プリフィルタ
- ポストフィルタ
- アウトプットフィルタ
それぞれフィルタ処理が実行されるタイミングが異なります。
上記の流れに当てはめてみると以下のようになります。
それぞれのフィルタが実行される時点での処理結果に対して、何らかの変換処理を行うようPHPでフィルタ関数を定義していきます。
ではどのような値がフィルタに渡されてくるのでしょうか。
以下のようなテンプレートで試してみます。
こんにちは、{$name}さん!!
今日は{$smarty.now|date_format:'%Y年%m月%d日'}です。
それぞれのフィルタに渡される内容は以下のようになります。
プリフィルタ
こんにちは、{$name}さん!!
今日は{$smarty.now|date_format:'%Y年%m月%d日'}です。
ポストフィルタ
こんにちは、_tpl_vars['name']; ?>
さん!!
今日は_run_mod_handler('date_format', true, $_tmp, '%Y年%m月%d日') : smarty_modifier_date_format($_tmp, '%Y年%m月%d日')); ?>
です。
アウトプットフィルタ
($name変数に"yossy"が渡されているとします)
こんにちは、yossyさん!! 今日は2009年01月15日です。

プリフィルタとアウトプットフィルタはテンプレート解析前と解析完了後に実行されるフィルタなのでどのような値が渡されるのか直感的に分かると思います。そしてポストフィルタですが、テンプレートに書かれた変数や修飾子がPHPのコードに置き換わっているのが分かります。
それぞれのPHPコードの内容に関してはここでは触れませんが、テンプレートで書かれた内容と同じような内容っぽいというのは、何となく推測出来そうですね。
- 1
- 2





ページのトップへ


kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。