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), выходной фильтр запускается после оценки кэша (в основном при каждом запросе).

Другие вопросы по тегам