klondike

Корпоративный блог студии "Клондайк"

Клондайк интернет маркетинга - WEB, SEO, SMM


Previous Entry Share Next Entry
Игошев Дмитрий
klondike

1C-Bitrix & 404 Not found

Проблема - компоненты при возникновении 404й ошибки не отдают 404.php.
Проблема 404й страницы на сайтах под управлением 1С-БУС известна давно и до недавнего времени не имела валидного решения.
Сегодня я расскажу о текущем способе перехвата 404й ошибки и вывода пользователю нужной страницы.
Начнем по порядку.
Со статичными страницами все в порядке и при запросе какого-то левака, Битрикс как положено отображает содержимое страницы 404.php, этот вопрос можно считать закрытым. Интереснее дела обстоят с компонентами, к примеру Bitrix:catalog, комплексный компонент каталога, может возвращаться код ответа 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.
Здесь решение проблемы аналогичное, главное очень внимательно отнестись к насткойке генерации URL не только на стороне компонента, но и системы в целом.


?

Log in

No account? Create an account