Smarty Postfilters/Prefilters如何在输出前应用于模板


Smarty Postfilters / Prefilters how to apply on template before output

我对如何使用smarty的后置/前置过滤器感到困惑。

我需要做的是在页面显示之前搜索并替换页面中的某些元素。我宁愿在调用$smarty->display之前立即执行此操作。这意味着,在它被保存到磁盘之前,但在它被编译之后(所以,postfilter)。

后置过滤器功能示例:

function smarty_postfilter_replace($tpl_output, $search, $replace)
{
    return str_replace($search, $replace, $tpl_output);
}

如何在智能输出之前应用此权限。我在看了Smarty文档(http://www.smarty.net/docsv2/de/advanced.features.postfilters.tpl)和其他一些例子,但似乎都不起作用。

有人能给我一个如何做到这一点的示例代码,以及如何将参数传递给过滤器($search,$replace)吗。

感谢

后置过滤器可能是最容易被误解的过滤器。当预过滤器在未编译的模板源代码上运行,输出过滤器在评估的输出(你知道,生成的HTML)上运行时,后过滤器作为编译器的一部分运行——它被提供给编译器生成的PHP。我不知道有人会怎么处理这个。无论如何,这不是你想要的。

使用输出筛选器替换内容。如果使用缓存,则在写入缓存之前运行,如果没有任何非缓存元素。如果您有非缓存元素(如{nocache}或带有nocache标志的变量),则在评估缓存后运行输出过滤器(几乎在每个请求上)。