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

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

string smarty_prefilter_name( $source,  
  $template);  
string   $source;
object   $template;

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

string smarty_postfilter_name( $compiled,  
  $template);  
string   $compiled;
object   $template;

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

例 18.7. プリフィルタプラグイン


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

     

例 18.8. ポストフィルタプラグイン


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

     

registerFilter() および unregisterFilter() も参照ください。