Smarty Postfilters / Prefilters как применить к шаблону перед выводом
Я не совсем понимаю, как использовать фильтры post / pre с smarty.
Что мне нужно сделать, так это искать и заменять определенные элементы на странице перед ее отображением. Я бы предпочел сделать это прямо перед вызовом $smarty->display. Это означает, что до того, как он будет сохранен на диск, но после его компиляции (так, постфильтр).
Пример функции постфильтрации:
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).
Спасибо
1 ответ
Постфильтр, вероятно, является наиболее неправильно понятым фильтром. В то время как предварительный фильтр запускается на исходном коде не скомпилированного шаблона, а выходной фильтр работает на оцененном выводе (знаете, сгенерированный HTML), постфильтр запускается как часть компилятора - он питается произведенным PHP компилятором. Я не уверен, что кто-нибудь сделает с этим. В любом случае, это не то, что вы ищете.
Используйте выходной фильтр, чтобы заменить ваш контент. Если вы используете кеширование, оно запускается перед записью в кеш, если у вас нет элементов без кеширования. Если у вас есть элементы без кэширования (например, {nocache} или переменные с флагом nocache), выходной фильтр запускается после оценки кэша (в основном при каждом запросе).