アウトプットフィルタ (拡張機能) - PHPプロ!マニュアル

Smartyマニュアル

拡張機能 - アウトプットフィルタ

アウトプットフィルタ

テンプレートが display() 又は fetch() を経由して呼び出された時、出力は1つ又は複数のアウトプットフィルタを通して送られます。 これは ポストフィルタ とは異なります。 コンパイルされたテンプレートがポストフィルタによって、 テンプレートがディスクに保存される前に処理されるのに対し、 アウトプットフィルタはテンプレートが実行される時にその出力を処理します。

アウトプットフィルタは、 登録する か、あるいは load_filter() 関数や $autoload_filters 変数によって プラグインディレクトリ から読み込みます。 Smarty は内部でユーザ定義関数の第1パラメータにコンパイルされたテンプレートのソースコードを渡すので、 関数内で処理を行った後にその結果のソースコードを戻り値として返すようにします。

例 15-4. アウトプットフィルタを使用する

<?php
// このユーザ定義関数をアプリケーションに加えます
function protect_email($tpl_output, &$smarty)
{
    
$tpl_output =
       
preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
                    
'$1%40$2'$tpl_output);
    return 
$tpl_output;
}

// アウトプットフィルタを登録します
$smarty->register_outputfilter('protect_email');
$smarty->display('index.tpl');

// これによりテンプレート出力に含まれるいくつかのemailアドレスは
// スパムボットからシンプルな保護を受けるでしょう
?>

register_outpurfilter()load_filter()$autoload_filtersポストフィルタ および $plugins_dir も参照してください。



Pick Up Q&A

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

>>続きを読む

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

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