Рассмотрим еще один способ создания обработчика для показа 404-й страницы в компонентах.
1. Создаем страницу 404.php
<?
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
CHTTP::SetStatus("404 Not Found");
@define("ERROR_404","Y");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Страница не найдена");?>
<div class="bx-404-container">
<h1>Страница не найдена>/h1>
<div class="bx-404-text-block">Неправильно набран адрес, <br>или такой страницы на сайте больше не существует.</div>
<div class="">Вернитесь на <a href="<?=SITE_DIR?>">главную</div>
</div>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
2. Добавляем обработчик события для проверки не 404-я ли ошибка сейчас
В файле /bitrix/php_interface/init.php добавляем такой код:
AddEventHandler('main', 'OnEpilog', '_Check404Error', 1);
function _Check404Error(){
if (defined('ERROR_404') && ERROR_404 == 'Y') {
global $APPLICATION;
$APPLICATION->RestartBuffer();
include $_SERVER['DOCUMENT_ROOT'] . SITE_TEMPLATE_PATH . '/header.php';
include $_SERVER['DOCUMENT_ROOT'] . '/404.php';
include $_SERVER['DOCUMENT_ROOT'] . SITE_TEMPLATE_PATH . '/footer.php';
}
}
3. Пользуемся
Теперь мы можем в любом компоненте или шаблоне использовать такой код:
CHTTP::SetStatus("404 Not Found");
@define("ERROR_404","Y");
return;
В результате выполнения данного кода будет показана страница 404.php и установлен статус 404.