1С-Битрикс & 404 Not found - UPDATE

В обновлении модуля "Информационные блоки" v15.5.1 от 24.05.2015 помимо всего прочего были обновлены компоненты bitrix:catalog, bitrix:news.

Данные компоненты "научились" работать с 404й ошибкой! Мы очень давно этого ждали и на безрыбье пользовались собственным решением описанным тут.

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

Обновление системы/шаблонов

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

	"MESSAGE_404"		=> $arParams["MESSAGE_404"],
	"SET_STATUS_404"	=> $arParams["SET_STATUS_404"],
	"SHOW_404"		=> $arParams["SHOW_404"],
	"FILE_404"		=> $arParams["FILE_404"],

Настройка компонентов

Переходим к настройкам компонентов. Сразу прокрутим вниз до блока "Настройки 404 ошибки" (скриншот 1).

Ранее этого блока не было, рассмотрим его параметры.

  • "Установить статус 404" - собственно устанавливает соответствующий статус.
  • "Показ специальной страницы" - если выбрать данный чек, то появится поле ввода для пути к странице ошибки 404.
  • "Сообщение для показа" - тут вводится текст, который будет выведен пользователю когда появляется 404я ошибка. По умолчанию данные берутся из компонента.

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

Если заполнить поле сообщения, то при возникновении 404й ошибки, на месте компонента будет выведено соответствующее сообщение.

"Не лучше костыля"

Вроде бы решение хорошее и даже работает, но давайте копнем глубже. Начнем с компонента bitrix:catalog, с настройками 404й ошибки вроде все ясно, но как работает метод с разными вариантами построения URL?

Первый вариант настройки URL

Разберем первый вариант построения URL для секций и элементов, блок "Управление адресами страниц", в данном случаи все элементы инфоблока находятся в корне, а секции выстраиваются в цепочку (скриншот 2).

Посмотрим как компонент будет реагировать на URL следующих типов:

  • "/models/section1/что-то-не-то/" — 404
  • "/models/что-то-не-то/section1/" — 404
  • "/models/что-то-не-тоsection1/" — 404
  • "/models/section1/что-то-не-то/section2/" — 404
  • "/models/element/что-то-не-то/" — 404
  • "/models/что-то-не-то/element/" — 404
  • "/models/что-то-не-тоelement/" — 404

И подобные комбинации будут адекватно отдавать 404ю ошибку.

Второй вариант настройки URL

Разберем второй вариант построения URL для секций и элементов, блок "Управление адресами страниц", в данном случаи все элементы инфоблока находятся в своих секциях, а секции находятся в корне (скриншот 3).

Посмотрим как компонент будет реагировать на URL следующих типов:

  • "/models/section1/что-то-не-то/" — 404
  • "/models/что-то-не-то/section1/" — 404
  • "/models/что-то-не-тоsection1/" — 404
  • "/models/element/что-то-не-то/" — 404
  • "/models/что-то-не-то/element/" — 200 OK
  • "/models/section/что-то-не-то/element/" — 404
  • "/models/что-то-не-тоelement/" — 404

Как видно из примера, при такой настройке между секцией и элементом, в URL можно написать что угодно и система это "проглотит". Ситуацию можно исправить только заменив #SECTION_CODE# на #SECTION_CODE_PATH#.

Компонент bitrix:news

Он тоже получил обновление, но как и раньше, очень плохо работает с секциями, а следовательно никакой адекватной обработки 404х ошибок с их участием нет.

Итог

В общем данное обновление полностью закрывает необходимость использования собственного решения. Но на этом все, поддержки некоторых видов настроек URL как не было, так и нет, компонент bitrix:news как и раньше - в пролете.


Оставить комментарий