アウトプットフィルタ
テンプレートがdisplay()又はfetch()を経由して呼び出された時、出力は1つ又は複数のアウトプットフィルタを通して送られます。これはポストフィルタと異なります。コンパイルされたテンプレートがポストフィルタによって、テンプレートがディスクに保存される前に処理されるのに対し、アウトプットフィルタはテンプレートが実行される時にその出力を処理します。
アウトプットフィルタはregister_outputfilterによって動的に登録されるか、load_filter()又は$autoload_filters変数によってプラグインディレクトリから読み込まれます。Smartyは内部でユーザ定義関数の第1パラメータにテンプレートの出力を渡すので、関数内で処理を行った後にその結果のソースコードを戻り値として返すようにします。
例 14-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アドレスは
// スパムボットからシンプルな保護を受けるでしょう
?>