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

PHP基礎編

yossy先生のSmarty講座

Lecutures on PHP

第9回 Smartyの便利な機能を使いこなす(その3:フィルタ編) (その1)

 このエントリーをはてなブックマークに追加

yossy先生

既に年明けから2週間ほど過ぎてしまいましたが、今年最初の記事ということで……
明けましておめでとうございます。2009年も引き続きよろしくお願いいたします。

さて今回はフィルタについて説明したいと思います。

Smartyの処理の流れとフィルタ

さてその前に、Smartyの処理の流れについてざっと説明したいと思います。

Smartyテンプレートを作成し、それを表示させるにはdisplay()メソッドやfetch()メソッドにテンプレートファイルを渡し、実行しますが、これらのメソッドの中では以下の図のような流れで処理が行われます。

Smartyの基本的な処理の流れ

いきなりテンプレートファイルから出力結果を生成するのではなく、テンプレートファイルを解析してPHPのコードに変換し、そのコードを実行することで最終的に出力結果を生成する、というように、段階を踏んで処理を行っています。

yossy先生そして、このテンプレートを解析する、結果を出力するといった処理の前後にテンプレートだけでは書けないような処理の実行結果を追加したり、テンプレートの内容を書き換えるなどの独自の処理を追加することが出来ます。

これが「フィルタ」という機能です。

Smartyのフィルタには以下の3種類があります。

  • プリフィルタ
  • ポストフィルタ
  • アウトプットフィルタ

それぞれフィルタ処理が実行されるタイミングが異なります。
上記の流れに当てはめてみると以下のようになります。

フィルタを適用したSmartyの処理の流れ

それぞれのフィルタが実行される時点での処理結果に対して、何らかの変換処理を行うよう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日です。

yossy先生


プリフィルタとアウトプットフィルタはテンプレート解析前と解析完了後に実行されるフィルタなのでどのような値が渡されるのか直感的に分かると思います。そしてポストフィルタですが、テンプレートに書かれた変数や修飾子がPHPのコードに置き換わっているのが分かります。

それぞれのPHPコードの内容に関してはここでは触れませんが、テンプレートで書かれた内容と同じような内容っぽいというのは、何となく推測出来そうですね。

  • 1
  • 2

  



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

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

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