プリフィルタ/ポストフィルタプラグイン (プラグインによる Smarty の拡張) - PHPプロ!マニュアル

Smartyマニュアル

プラグインによる Smarty の拡張 - プリフィルタ/ポストフィルタプラグイン

プリフィルタ/ポストフィルタプラグイン

プリフィルタ/ポストフィルタプラグインは概念において非常によく似ています。 それらの違いは実行されるタイミングにあります。

string smarty_prefilter_name (string $source, object &$smarty)

プリフィルタは、テンプレートソースをコンパイルする直前に何らかの処理を行うために使用されます。 プリフィルタ関数への第1パラメータはテンプレートソースであり、 これは他のプリフィルタによって既に修正されている可能性があります。 このプラグインは戻り値に、修正されたテンプレートソースを返すようにして下さい。 また、このテンプレートソースはどこにも保存されず、コンパイルする目的だけに使用される事に注意して下さい。

string smarty_postfilter_name (string $compiled, object &$smarty)

ポストフィルタは、テンプレートのコンパイルが行われてファイルシステムに保存される前に、 そのテンプレートのコンパイル結果(PHPスクリプト)に何らかの処理を行うために使用されます。 ポストフィルタへの第1パラメータはコンパイルされたテンプレートソースであり、 これは他のポストフィルタによって既に修正されている可能性があります。 このプラグインは戻り値に、修正されたテンプレートソースを返すようにして下さい。

例 16-7. プリフィルタプラグイン

<?php
/*
 * Smarty plugin
 * -------------------------------------------------------------
 * File:     prefilter.pre01.php
 * Type:     prefilter
 * Name:     pre01
 * Purpose:  html タグを小文字に変換する
 * -------------------------------------------------------------
 */
 
function smarty_prefilter_pre01($source, &$smarty)
 {
     return 
preg_replace('!<(\w+)[^>]+>!e''strtolower("$1")'$source);
 }
?>

例 16-8. ポストフィルタプラグイン

<?php
/*
 * Smarty plugin
 * -------------------------------------------------------------
 * File:     postfilter.post01.php
 * Type:     postfilter
 * Name:     post01
 * Purpose:  現在のテンプレートのすべての変数をリストするスクリプトを出力する
 * -------------------------------------------------------------
 */
 
function smarty_postfilter_post01($compiled, &$smarty)
 {
     
$compiled "<pre>\n<?php print_r(\$this->get_template_vars()); ?>\n</pre>" $compiled;
     return 
$compiled;
 }
?>

register_prefilter() unregister_prefilter() register_postfilter() および unregister_postfilter() も参照してください。



Pick Up Q&A

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

>>続きを読む

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

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

Q&A掲示板 新着情報