前置/后置过滤器

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

|string smartyprefilter_name(|$source, |
| |
$template_);|

string $source;object $template;

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

|string smartypostfilter_name(|$compiled, |
| |
$template_);|

string $compiled;object $template;

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


Example 18.7. 前置过滤器

  1. <?php
  2. /*
  3. * Smarty plugin
  4. * -------------------------------------------------------------
  5. * File: prefilter.pre01.php
  6. * Type: prefilter
  7. * Name: pre01
  8. * Purpose: 转换HTML标签为小写
  9. * -------------------------------------------------------------
  10. */
  11. function smarty_prefilter_pre01($source, Smarty_Internal_Template $template)
  12. {
  13. return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source);
  14. }
  15. ?>
  16.  


Example 18.8. 后置过滤器

  1. <?php
  2. /*
  3. * Smarty plugin
  4. * -------------------------------------------------------------
  5. * File: postfilter.post01.php
  6. * Type: postfilter
  7. * Name: post01
  8. * Purpose: 列出当前模板的变量
  9. * -------------------------------------------------------------
  10. */
  11. function smarty_postfilter_post01($compiled, Smarty_Internal_Template $template)
  12. {
  13. $compiled = "<pre>\n<?php print_r(\$template->getTemplateVars()); ?>\n</pre>" . $compiled;
  14. return $compiled;
  15. }
  16. ?>
  17.  

参见: registerFilter() unregisterFilter().

原文: https://www.smarty.net/docs/zh_CN/plugins.prefilters.postfilters.tpl