1С-Битрикс & 404 Not found
Проблема — компоненты при возникновении 404й ошибки не отдают 404.php.
Проблема 404-ой страницы на сайтах под управлением 1С-БУС известна давно, и до недавнего времени не имела валидного решения. Сегодня я расскажу о текущем способе перехвата 404-ой ошибки и вывода пользователю нужной страницы.
Начнем по порядку.
404 & Bitrix:catalog.
Первичная настройка.
Для начала пройдемся по настройкам ИБ и компонента.
Настройки инфоблока
- «URL страницы информационного блока» — тут вроде все понятно, просто указываем каталог из которого происходит вызов компонента для этого ИБ.
- «URL страницы раздела» — тут нужно быть аккуратным, если все элементы ИБ лежат в корне раздела, то мы не можем использовать.
- «#SECTION_CODE#» — при такой настройке роутер компонента будет путать разделы и элементы ИБ. Чтобы этого не происходило мы используем «#SECTION_CODE_PATH#».
- «URL страницы детального просмотра» — т.к. мы кладем все элементы в корень, то здесь используется только «#ELEMENT_CODE#».
На этом с настройками ИБ закончили.
Настройки компонента
- «Каталог ЧПУ» — соответственно раздел в котором происходит вызов компонента
- «Раздел» — повторяем настройку из ИБ, но перед «#» не ставим слеш «/», в противном случаи компонент будет работать не верно!
- «Детальная информация» — повторяем настройку из ИБ, но перед «#» не ставим слеш «/», в противном случаи компонент будет работать не верно!
- И не забудем про «волшебную галочку».
Теперь о грустном — 404й статус мы вроде как получаем, но компонент не спешит перебрасывать нас на 404.php, а просто пишет что раздел или элемент не найден.
А нам то нужно отобразить 404ю, чтобы юзер понял что что-то пошло не так, показать ему доп менюшку и т.д.
Решение проблемы.
Для решения этой проблемы мы воспользуемся механизмом событий 1С-БУС.
//событие "ловушка" для 404й AddEventHandler('main', 'OnEpilog', '_Check404Error', 1); function _Check404Error(){ if(defined('ERROR_404') && ERROR_404=='Y' || 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'; } }
В эпилоге мы запускаем проверку на установку константы «ERROR_404» и ее текущее значение, а также проверяем последний выставленный статус, это позволяет выловить всевозможные проявления 404й ошибки у 1С-БУС. Далее мы рестартуем HTML буфер подготовленный системой для вывода. Подключаем хедер текущего шаблона, подгружаем тело 404й страницы, а затем подключаем футер текущего шаблона. Данный подход позволяет сохранить текущий URL, шаблон и навигацию, поэтому пользователь легко сможет перейти обратно в рабочий раздел, а также в контентной области отображаем тело 404й страницы, это дает понять что запрошенной страницы действительно нет.
404 & Bitrix:news.
К сожалению компонент Bitrix:news пока не умеет адекватно отдавать хотя бы голый 404й статус, мы в поиске решения.
Оставить комментарий