CodeIgniter и TeamSense: Делаем свой вид для страницы с ошибкой 404, настраиваем правильную отдачу статусов в HTTP headers
Меня всегда досадовала ситуация со страницей ошибки 404 в CodeIgniter. Во первых, стандартная страница отпугивает меня и думаю, ещё больше людей, которые вдруг на неё попадают. Вот как она выглядит.
Малоинформативна для обычного человека и не предлагает никаких альтернатив, кроме как вернуться назад или вообще закрыть сайт и забыть о его существовании. В фреймворке Yii этот момент продуман лучше, но давайте сделаем свой вид для страницы с ошибкой 404 в CodeIgniter, а также по ходу дела настроим правильную отдачу статусов в HTTP headers (очень важно для поисковых роботов).
Кстати говоря, способ, о котором я расскажу успешно работает в нашем продукте Team Sense и на сайте Центра межкультурного общение Открытый Мир. Поэтому, те кто приобретает у нас систему Team Sense, получают и это обновление в коде.
1. Случай, когда не существует контроллер или метод.
В CodeIgniter 2.x введен новый роут – $route['404_override']. Прописываем туда путь к нашему контроллеру/методу, который приведёт на собственнцю страницу с ошибкой 404. Он должен быть сразу под default_controller и до всех ваших роутов:
$route['default_controller'] = "welcome"; $route['404_override'] = 'error/error_404'; ...
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Error extends MY_Controller { public function __construct() { parent::__construct(); } function error_404() { $this->output->set_status_header('404'); //$this->load->view('404'); $this->data['title'] = "Страница не найдена"; $this->data['content'] = '<h1>Страница не найдена.</h1> Посмотрите существующие страницы в меню, или перейдите <a href="'.base_url().'">на главную.</a>'; $this->render('page'); } } ?>
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Error extends MY_Controller { function error_404() { $this->output->set_status_header('404'); $this->load->view('404'); } }
2. Случай, когда вызывается метод с несуществующим параметром (аргументом), нет записи с таким $id.
if(!$this->data['article']) show_404();
function read($id) { $this->data['article'] = $this->Articles_model->get($id); if(!$this->data['article']) echo page_not_found('<h1>Страница не найдена.</h1> Посмотрите существующие страницы в меню, или перейдите <a href="'.base_url().'">на главную.</a>'); else { ...
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); // make sure the function doesn't already exist // You don’t want to mistakenly override an existing function if ( ! function_exists('page_not_found')) { function page_not_found($var = '') { header("HTTP/1.1 404 Not Found"); return $var; } } ?>
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 0 CodeIgniter: Всплывающая форма обратной связи на Ajax в Bootstrap Modal и проверкой Captcha (18.02.2014)
- 0 Opencart: Установка мета тега Keywords для главной страницы через админку (05.12.2013)
- 0 Даб-даб-даб. Просто прикольная девушка по имени Майле Охуе в гугле хорошо объясняет. (24.04.2013)
- 0 Добавляем в <title> название категории Joomla (22.08.2013)
- Как правильно обновить ExpressionEngine до последней версии 2.5.5 (05.02.2013)
- Team Sense: Доступна отправка сообщения/письма на email сотрудника. (18.01.2013)
- TeamSense: username (логин) в регистрации пользователя. Внедрили библиотеку DHTMLX в TeamSense. (11.01.2013)
- Team Sense: В календарь добавлена возможность указывать место проведения уроков (в офисе, на выезде) (12.12.2012)
- Team Sense: Многопользовательский календарь, заменяем радиокнопки на чекбоксы в выборе преподавателей. Массивы в Javascript. (06.12.2012)
- Team Sense: В календарь-расписание уроков добавлено разделение по преподавателям, которым присвоены свои цвета. (04.12.2012)
- CodeIgniter не передаёт $this->uri->segment(3) в функцию контроллера (передача переменной PHP->JavaScript->PHP) (28.11.2012)
- Воюем с форматом даты в JavaScript. Приведение формата даты в поле input в календаре системы TeamSense к более красивому виду. (18.11.2012)
- Team Sense: Теперь Email-оповещения в TODO можно отправлять как для руководителя задачи, так и для помощников. (21.09.2012)
- CodeIgniter и TeamSense: Делаем свой вид для страницы с ошибкой 404, настраиваем правильную отдачу статусов в HTTP headers (12.09.2012) ← вы тут
- Установка другого сайта (на CodeIgniter или Yii) в подпапку и чтобы поддомен ссылался на подпапку (25.08.2015)
- Логотип и пара обновлений для Team Sense (30.08.2012)
- Встречайте TeamSense! Большое обновление и новый сайт. (22.08.2012)
- CodeIgniter: Подключение JS и CSS файлов там, где это нужно. (26.06.2012)
- Использование DISTINCT в SQL-запросах для исключения повторяющихся данных применительно к фреймворку CodeIgniter. (18.06.2012)
- CodeIgniter выдаёт ошибку: Cannot modify header information - headers already sent by (13.04.2012)
- CodeIgniter: Передаются пустые значения полей формы через $_POST если вводить русские символы. Форма не проходит валидацию. (17.08.2016)
- Joomla 1.5 SEO: Добавляем тег <h1> в название статьи (20.03.2012)
- OpenCart: Автоматическое заполнение meta keywords для улучшения SEO (29.03.2012)
- Настраиваем SEO urls для страниц магазина на OpenCart (ЧПУ в OpenCart) (29.03.2012)
- Золотые правила поисковой оптимизации контента (23.02.2012)