Чаще всего ближе к концу разработки сайта, программист и заказчик вспоминают, что надо бы как-то сделать так, чтобы выдаваемая 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-й ошибкой у вас не будет.
А как должно выглядеть условие в шаблоне 404-й страницы полностью?
Это условие не в шаблоне, а в настройках сайта в списке шаблонов. Там нужно «выбрать шаблон», выбрать «условие PHP» и там уже вписать это условие