プリフィルタ/ポストフィルタプラグイン
プリフィルタ/ポストフィルタプラグインは概念において非常によく似ています。それらの違いは実行されるタイミングにあります。
string smarty_prefilter_name (string $source, object &$smarty)
プリフィルタは、テンプレートソースをコンパイルする直前に何らかの処理を行うために使用されます。プリフィルタ関数への第1パラメータはテンプレートソースであり、おそらくこれは他のプリフィルタによって既に修正されています。このプラグインは戻り値に、修正されたテンプレートソースを返すようにして下さい。また、このテンプレートソースはどこにも保存されず、コンパイルする目的だけに使用される事に注意して下さい。
string smarty_postfilter_name (string $compiled, object &$smarty)
ポストフィルタは、テンプレートのコンパイルが行われてファイルシステムに保存される前に、そのテンプレートの出力(phpスクリプト)に何らかの処理を行うために使用されます。ポストフィルタへの第1パラメータはコンパイルされたテンプレートソースであり、おそらくこれは他のポストフィルタによって既に修正されています。このプラグインは戻り値に、修正されたテンプレートソースを返すようにして下さい。
例 15-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);}
?>
例 15-8. postfilter plugin
<?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;}
?>