Я пытаюсь реализовать «Flash-сообщение» (небольшое сообщение, которое будет отображаться вверху при «следующем» запросе, например «запись сохранена»), на PHP-сайте с довольно грязным кодоми использует Smarty.
Лучшее, что я мог придумать, это:
- Я установил сообщение в специально названной переменной в $ _SESSION
- Мой «заголовок»шаблон проверяет эту переменную ($ smarty.session.flash) и, если она установлена, показывает сообщение
- после рендеринга, и только если шаблон был обработан, очистите переменную $ _SESSION.
Моя проблема с # 3.Единственный способ найти выход - это зарегистрировать выходной фильтр в Smarty:
function smarty_outputfilter_flashmessage($tpl_output, $smarty) {
if (isset($_SESSION['flash'])) {
$_SESSION['flash'] = "";
}
return $tpl_output;
}
$smarty->register_outputfilter("smarty_outputfilter_flashmessage");
Проблема в том, что, если шаблон имеет под-шаблоны, эта функция вызывается для каждого под-шаблона.,Кроме того, в коде есть несколько мест, которые выполняют
$variable = $smarty->fetch('something.tpl')
, что также вызывает мой выходной фильтр.
Когда это происходит, выходной фильтр очищает переменную сеанса до того, как шаблон заголовка будетоказано, и сообщение потеряно.
Любые идеи / предложения о том, как лучше это сделать?
Есть ли какой-то встроенный обратный вызов PHP для выполнения пользовательской функции, когда запрос "заканчивается"?(С этим я мог бы добавить очистку там, и бы output_filter просто установил переменную, чтобы показать, было ли что-то обработано)
В идеале, то, что вызывается, если код не вызывает die ()?
Или, конечно, еще один совершенно другой и лучший способ сделать это?
Спасибо!
Даниэль