アウトプットフィルタ

テンプレートが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アドレスは
// スパムボットからシンプルな保護を受けるでしょう
?>