Bitrix

1C-Битрикс — 404-я ошибка

Чаще всего ближе к концу разработки сайта, программист и заказчик вспоминают, что надо бы как-то сделать так, чтобы выдаваемая 404-я ошибка была красива на вид и давала юзеру понять, что попал он не туда куда хотел. Есть стандартный способ — простое редактирование страницы 404-й — файл 404.php в корне сайта на битрикс. Но такой способ не дает, во первых, использовать отдельный дизайн для этой страницы; и во-вторых, невозможно ее показывать при обращении к несуществующему элементу или секции инфоблока. Однако, есть еще один способ… 

Немного теории…

В Битрикс при обнаружении, что сейчас будет нужно обрабатывать 404-ю ошибку в движке автоматически задается константа ERROR_404 и приравнивается «Y». Наша задача в таком случае состоит в том, чтобы отловить момент, когда такая константа появляется и, конечно же, в этом могут нам помочь только события.

В данном конкретном случае нам имеет смысл обратиться к событию OnEpilog, которое возникает в конце выполнения страницы.

Немного практики…

Напишем такой код в /bitrix/php_interface/init.php

<?
AddEventHandler("main", "OnEpilog", "OnEpilogHandler");
function OnEpilogHandler()
{
if(defined('ERROR_404') && ERROR_404 == 'Y')
{
$template = 'template_for_404';
global $APPLICATION;
$APPLICATION->RestartBuffer();
include $_SERVER['DOCUMENT_ROOT'].'/bitrix/templates/'.$template.'/header.php';
include $_SERVER['DOCUMENT_ROOT'].'/404.php';
include $_SERVER['DOCUMENT_ROOT'].'/bitrix/templates/'.$template.'/footer.php';
}
}
?>

Как видно из кода, происходит проверка на 404-ю ошибку и если таковая есть, то подменяется полностью контент страницы. Для того, чтобы код заработал, требуется наличие шаблона /bitrix/templates/template_for_404 , который будет являться шаблоном для страницы 404-й ошибки.

Для того, чтобы назначить шаблон 404-й ошибки для всех остальных случаев — нужно зайти в редактирование сайта и в шаблонах выбрать шаблон template_for_404 и в нем добавить условие PHP:

defined('ERROR_404') && ERROR_404 == 'Y'

После этого проблем с 404-й ошибкой у вас не будет.

Комментариев: 2

Отставить комментарий

Ваш электронный адрес не будет опубликован.Обязательные для заполнения поля отмечены *

четыре × 1 =