第9回 Smartyの便利な機能を使いこなす(その3:フィルタ編) - Smarty講座
yossy先生のSmarty講座
Lecutures on PHP
第9回 Smartyの便利な機能を使いこなす(その3:フィルタ編) (その2)
フィルタ関数を作ってみる
では実際にフィルタ関数を作ってみたいと思います。まずは以下のPHPのコードを見てみてください。
(テンプレートディレクトリの設定などは、ここでは省略します)
<?php
$smarty = new Smarty();
$smarty->register_prefilter('my_prefilter');
$smarty->register_postfilter('my_postfilter');
$smarty->register_outputfilter('my_outputfilter');
$smarty->assign('name', 'yossy');
$smarty->display('hello.tpl');
?>
register_prefilter()、register_postfilter()、register_outputfilter()というSmartyのメソッドが登場しました。
これらのメソッドを用いると、それぞれプリフィルタ、ポストフィルタ、アウトプットフィルタを登録することが出来ます。
上記の例ではプリフィルタとして my_prefilter()、ポストフィルタとして my_postfilter()、そしてアウトプットフィルタとして my_outputfilter()というフィルタ関数が実行されます。
フィルタ関数は以下のような関数になります。
function my_prefilter($tpl_source, $smarty)
{
// Smartyテンプレートのコメントを取り除く
return preg_replace('/\{\*.+\*\}/sU', '', $tpl_source);
}
上記の例は渡されたSmartyテンプレート中にあるコメント{* ... *}を全て削除するプリフィルタです。
フィルタ関数は、3種類とも上記のような2つの引数を持ちます。第1引数はフィルタの対象となる文字列、第2引数はSmartyオブジェクトです(*1)。この第1引数で渡される文字列に対して何らかの処理を行い、その実行結果を戻り値とします。
上記の my_prefilter() というフィルタ関数では、まずプリフィルタとしてテンプレートの内容を引数$tpl_sourceで受け取ります。そして関数内でSmartyテンプレートのコメントを取り除く処理を行い、その結果を戻り値として返しています。
このフィルタ関数の実行結果が、次の解析フェーズのPHPコード変換処理へと渡されていきます。
以上でフィルタの説明を終わりにします。
そんなに規模の大きくないサイトでは使いどころを見つけるのが難しい機能ではありますが、例えばブラウザやケータイの機種によって出力結果を調整したいが、テンプレートをブラウザやケータイの機種ごとにわざわざ用意するのは非常に手間や管理コストがかかる、といった場面で用いると効果的です。
また第6回で触れた文字エンコード切り替えの処理も、実はアウトプットフィルタで一括で変換すると非常に簡単に実現できたりします。
次回はプラグインについて説明したいと思います。
----
(*1)PHP4の場合、参照引数で定義してください。この例では function my_prefilter($tpl_source, &$smarty) となります。
- 1
- 2
その他の記事も見る
- 第1回 Smartyの紹介
- 第2回 Smartyを使ってみる(その1:変数編)
- 第3回 Smartyを使ってみる(その2:制御構造編)
- 第4回 Smartyを使ってみる(その3:関数編)
- 第5回 Smartyを使って実用的なページを作ってみる(その1)
- 第6回 Smartyを使って実用的なページを作ってみる(その2)
- 第7回 Smartyの便利な機能を使いこなす(その1:キャッシュ前編)
- 第8回 Smartyの便利な機能を使いこなす(その2:キャッシュ後編)
- 第9回 Smartyの便利な機能を使いこなす(その3:フィルタ編)
- 第10回 Smartyの便利な機能を使いこなす(その4:プラグイン編)
- 第11回 Smartyとフレームワーク(その1:CakePHP編)
- 第12回 Smartyとフレームワーク(その2:Zend Framework編)
- 第13回 次世代のSmarty - Smarty3の紹介
- 第14回 Smartyでケータイサイトを作ってみる
- >>「yossy先生のSmarty講座」一覧ページに戻る
- yossy先生
本名:吉武 正史
パッケージ系ソフトウェア会社で、自然言語処理系の研究やWebアプリケーション、検索連動型広告などの開発に従事。
2006年末にフリーランスとして独立し、現在はPHPによるWeb開発の業務を中心に、コンサルティングや執筆活動などを展開。
サイトURL:http://freeative.jp/





ページのトップへ


GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。