Я использую CodeIgniter со Smarty. У меня есть дополнительная функция в моем классе Smarty, которая называется notfound (). Вызов notfound () устанавливает правильное расположение заголовка для страницы 404, а затем отображает шаблон 404. Шаблон имеет перезаписываемый заголовок и сообщение, поэтому он очень универсален. Вот пример кода:
Smarty.class.php
function not_found() {
header('HTTP/1.1 404 Not Found');
if (!$this->get_template_vars('page_title')) {
$this->assign('page_title', 'Page not found');
}
$this->display('not-found.tpl');
exit;
}
В контроллере я могу сделать что-то вроде этого:
$this->load->model('article_model');
$article = $this->article_model->get_latest();
if ($article) {
$this->smarty->assign('article', $article);
$this->smarty->view('article');
} else {
$this->smarty->assign('title', Article not found');
$this->smarty->not_found();
}
Аналогично, я могу изменить код в /system/application/error/error_404.php на:
$CI =& get_instance();
$CI->cismarty->not_found();
Он отлично работает, использует небольшой объем кода и не дублирует функциональность 404 для различных типов отсутствующих объектов.
Я думаю, вы могли бы сделать то же самое со встроенными представлениями CodeIgniter. Важно выплюнуть заголовок, прежде чем приступить к просмотру.
Обновление: я использую пользовательскую оболочку Smarty, аналогичную описанной здесь:
Использование Smarty с CodeIgniter