+7 8512 41-41-61

Универсальная страница 404 ошибки в 1С-Битриксе

У каждого более менее нормального магазина встаёт проблема вывода красивой 404 странички. И первым делом лезем в документацию и курсы Битрикса. Там конечно подробно расписано, как настроить 404 ошибку. Мы радостные создаём файл в корне с именем 404.php , помещаем туда нужный html код и довольные закрываем задачу с уверенностью, что всё работает корректно.

И правда. При попытке открыть несуществующую страницу выскакивает красивое окно с 404 ошибкой:


Но не тут то было. Через какое-то время SEO-специалист обнаруживает, что в каталоге всё по старому. Т.е. вместо красивой 404 ошибки выскакивает либо красная надпись, что раздел/элемент не найден, либо показывается начальная страница каталога. Хоть и статус у страницы правильный, но всё же приукрасить и добавить функционала на 404 страницу не помешает, ведь в магазине всегда появляется и исчезает огромное количество товара. Что доступно сейчас, не доступно завтра. Но пользователи смогут перейти на этот товар из поисковиков. А красивая и функциональная страница не позволит ему тут же закрыть браузер.

Думаю, хватит вступления. Теперь перейдём к решению. А оно довольно простое. 

1) В файл init.php вставляем обработчик:

AddEventHandler("main", "OnEpilog", "ShowError404");

function ShowError404() {
    if (CHTTP::GetLastStatus()=='404 Not Found') {
        global $APPLICATION;
        $APPLICATION->RestartBuffer();
        require $_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php';
        require $_SERVER['DOCUMENT_ROOT'] . '/404.php';
        require $_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php';
    }
}

Разберём подробней. Обработчик вызывается в самом конце создания страницы, чтобы точно быть уверенными, что все компоненты вызвались. CHTTP::GetLastStatus() устанавливается в компонентах Битрикса, т.е. как раз тот случай, который не обыгрывается стандартным решением от Битрикса. Далее мы сбрасываем буффер, тем самым очищаем всё, что успело попасть в него до этого. Заключительным шагом мы подключаем напрямую хедер, файл 404 ошибки и футер.

2) Устанавливаем содержимое файла 404.php:

<?
include($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
@define('ERROR_404', 'Y');

$APPLICATION->SetTitle("Страница не найдена");
?>

Тут любой ваш текст
<?
$APPLICATION->IncludeComponent("bitrix:main.map", ".default", array(
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "36000000",
        "SET_TITLE" => "Y",
        "LEVEL" =>      "3",
        "COL_NUM"       =>      "2",
        "SHOW_DESCRIPTION" => "Y"
        ),
        false
);
?>
Например, карта сайта.

<?include($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Вот и всё. Теперь мы можем любоваться красивой 404 страницей. Не забудьте поставить на неё строку поиска. Тогда клиент точно не уйдёт с вашего сайта ;)

12 Февраля 2015
|
Гаврилов Евгений
|
Просмотров: 22817