前置/后置过滤器

前置过滤器和后置过滤器在概念上非常相似,不同点仅在于执行的时机。

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

前置过滤器是在模板源码被编译前的时刻执行。 第一个参数是模板源码,源码可能已被其他过滤器处理过的。 前置过滤器插件将处理并返回过滤后的源码。 注意这些返回的源码不会被保存,它们仅提供给编译使用。

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

后置过滤器会在编译器已经把模板编译完成,但未保存到文件系统的时候执行。 第一个参数是已编译的代码,代码可能被其他过滤器处理过的。 后置过滤器将进行处理并返回处理后的代码。

Example 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);
 }
?>

     

Example 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().