Единая страница 404 ошибки для всего сайта в 1С-Битрикс

Единая страница 404 ошибки для всего сайта в 1С-Битрикс

Единая страница 404 ошибки для всего сайта в 1С-Битрикс

В 1С-Битрикс на страницу с 404 ошибкой можно попасть только тогда, когда не найден физический раздел сайта, то есть папка. Если же вы не так указали адрес динамического раздела каталога, например, или карточки товара, то вы просто получите красные надписи "Раздел не найден" и "Элемент не найден".

Но что делать, если необходимо любой 404 ответ обрабатывать в едином стиле? На помощь нам приходят нехитрые инструкции, которыми мы и воспользуемся.

Все манипуляции мы будем совершать в файле init.php, который расположен по адресу /bitrix/php_interface/. Если по данному пути у вас нет такого файла, то придется его создать.

После чего нужно определиться, будет ли наша страница с ошибкой в стиле сайта, или она будет полностью иметь свой собственный стиль.

Страница 404 в стиле сайта

Начнем с первого варианта. Для этого откроем init.php и запишем туда следующий код:

AddEventHandler("main", "OnEpilog", "My404PageInSiteStyle");
function My404PageInSiteStyle()
{
	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';
	}
}

Итак, что же делает код выше. Во первых, мы повесили обработчик на событие OnEpilog, то есть на тот момент, когда страница уже будет обработана и скомпонована. В нем мы указали название нашей функции My404PageInSiteStyle, которая будет отвечать за вывод текста 404 ошибки.

Далее мы переходим непосредственно к нашей функции. Что же там происходит. Сначала мы проверяем, была ли определена константа, которая указывает на то, что запрашиваемое содержимое не найдено - ERROR_404. Если такая константа имеется, то мы делаем следующее:

  • Перезапускаем буфер, чтобы полностью очистить текущую компоновку и сформировать новую;
  • Подключаем header.php нашего шаблона;
  • Подключаем файл 404.php в котором хранится некий наш контент, - будь то текст или картинка, - который оповестит пользователя, что такой страницы нет;
  • Подключаем footer.php нашего шаблона;

Затем прогружается вновь сформированная страница в стиле нашего сайта, в контентной части которой будет выведен текст из файла 404.php. Этот файл может лежать где угодно, называться как угодно. Но привычнее называть его именно так и хранить в корневой директории сайта.

Страница 404 с индивидуальным дизайном

В последнее время многие стали делать страницу с 404 ошибкой в собственном оформлении, не привязываясь к стилю сайта. Собственно, мой блог не исключение.

Зачем это делается? Если рассматривать этот аспект с точки зрения продвижения, то это делается для того, чтобы направить пользователя на нужные разделы или страницы, если он каким-то образом случайно попал на несуществующую страницу.

На такой странице оптимизаторы проставляют ссылки, чтобы человек не ушел, а продолжил посещение сайта.

Но также это делается, чтобы просто не нагружать посетителя ненужной информацией и не вводить в ступор. Порой бывает заходишь на сайт, кликаешь по интересующей ссылке и попадаешь на какую-то странную страницу. И вроде бы ты на сайте, вроде бы ошибок нет, но информацию ты никакую не получил. Вот и ищешь глазами, начинаешь смотреть, искать. И не находишь. Естественно желание вновь возвращаться на такой сайт резко пропадает.

Чтобы посетителю конкретно указать, что он попал на несуществующую страницу, ее и стараются выделить каким-то индивидуальным дизайном, чтобы "встряхнуть" посетителя и дать понять, что он забрел куда-то не туда.

Давайте немного модифицируем код выше, для того, чтобы у нас была возможность делать свои собственные страницы с 404 ошибкой не в стилях сайта.

AddEventHandler("main", "OnEpilog", "My404PageInMyOwnStyle");
function My404PageInMyOwnStyle()
{
	if(defined('ERROR_404') && ERROR_404 == 'Y')
	{
		global $APPLICATION;
		$APPLICATION->RestartBuffer();
		include $_SERVER['DOCUMENT_ROOT'].'/404.php';
	}
}

Как видите, все очень просто. Мы всего лишь убрали подключение header.php и footer.php, тем самым шаблон нашего сайта не будет грузиться. А загрузится только содержимое файла 404.php.

Правила оформления файла 404.php в 1С-Битрикс

Когда мы определились с тем, как будет выглядеть наша страница 404 ошибки, необходимо ее подготовить.

Самое важное здесь - это установить статус 404 ошибки, иначе страница вам будет выдаваться с кодом ответа 200 ОК, что есть совсем нехорошо.

Вот та минимальная программная часть, которая должна быть указана в начале файле 404.php:

<?
	require $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"; 
	include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
	CHTTP::SetStatus("404 Not Found");
	@define("ERROR_404","Y");
?>

Что тут происходит:

  • Здесь мы подключаем файл prolog_before.php, чтобы, если понадобится, мы могли пользоваться различными переменными, константами и методами 1С-Битрикс. Например, подключить модуль информационных блоков и положить сюда компонент по выводу случайных элементов;
  • Далее мы подключаем файл urlrewrite.php, который будет обрабатывать наш урл;
  • После этого самое важное - мы устанавливаем статус и заголовок ответа 404 Not Found;
  • И на всякий случае еще раз определим константу 404 ошибки. А чтобы не было ошибок, поставим перед ней собачку;

После этого вы можете уже верстать 404 страницу как вам угодно. Вот вам небольшая "рыба" заготовка:

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Страница не найдена</title>
	<link rel="shortcut icon" href="<?=SITE_TEMPLATE_PATH?>/favicon.ico" />
	<style type="text/css">
		.container{
			width: 1170px;
			margin: 0 auto;
		}
	</style>
</head>
<body>
		<div class="container">
			<img src="/images/404.jpg"><br />
			<p>Ой ой ой! СТраница не найдена!</p>
		</div>
</body>
</html>

Ну вот, теперь вы легко сможете создавать в 1С-Битрикс любые страницы 404 ошибки, какие только захотите.

Успехов вам!