Yandex Metrika
sanches.free 18 просмотров

Страница новостей на комплексном компоненте bitrix:news и настройка ЧПУ

Компонент bitrix:news и маршрутизация запросов

Комплексный компонент новостного раздела в «1С-Битрикс» сам по себе почти не обращается к базе: он только смотрит на текущий URL и подключает нужный файл шаблонов — общий список, список внутри раздела или детальную карточку. Уже там вызываются простые компоненты вида bitrix:news.list и bitrix:news.detail с параметрами, проброшенными из переменных маршрута.

Инфоблок: коды адресов и поисковая индексация

Сначала заводится тип инфоблоков (например, с символьным кодом novosti) и сам инфоблок. Если в типе выключена опция дерева по разделам, вложенные разделы для материалов недоступны — для новостной иерархии её обычно оставляют включённой.

В настройках инфоблока задают шаблоны URL: корень раздела, раздел и деталь. Типовой набор с отдельным префиксом для карточки выглядит так: корень #SITE_DIR#/novosti/, раздел #SITE_DIR#/novosti/#SECTION_CODE#/, детально #SITE_DIR#/novosti/detail/#ELEMENT_CODE#/. Если хочется путь вида #SITE_DIR#/novosti/#SECTION_CODE#/#ELEMENT_CODE#/, у всех разделов понадобятся символьные коды и продуманный сценарий для элементов без раздела.

Конфликт «раздел vs деталь»

Системе нужно недвусмысленно понимать тип страницы. Неработающая схема: раздел как /catalog/#SECTION_CODE#/ и карточка как /catalog/#ELEMENT_CODE#/ на одном уровне глубины — по одному сегменту адреса CMS не узнает, раздел это или элемент. Комбинация вида раздел /catalog/#SECTION_CODE#/ и детально /catalog/#SECTION_CODE#/#ELEMENT_CODE#/ уже различима по количеству сегментов.

Символьные коды

Раз макросы опираются на коды элементов или разделов, в свойствах инфоблока задают их обязательность, автогенерацию из названия и проверку уникальности. Если коды необязательны, уникальность URL можно подстраховать, добавив идентификатор к шаблону детальной страницы, например сочетание #ELEMENT_ID# и #ELEMENT_CODE#. На вкладке доступов для публичного чтения выставляют чтение гостям, если контент общедоступен.

Страница через визуальный редактор

Актуальный набор параметров вызова удобнее брать из публичной части: создают раздел с папкой, совпадающей с корнем из настроек инфоблока (если в шаблоне указано #SITE_DIR#/novosti/ и сайт в корне — папка /novosti/), убирают лишний текст и перетаскивают зелёный комплексный компонент bitrix:news. В мастере привязывают тип и идентификатор инфоблока.

Согласование ЧПУ компонента и инфоблока

На вкладке управления адресами указывают каталог ЧПУ относительно корня (часто /novosti/), шаблон раздела вроде #SECTION_CODE#/ и детальную ветку detail/#ELEMENT_CODE#/. Склейка «каталог ЧПУ + правило компонента» должна совпасть с соответствующими шаблонами в инфоблоке без макроса #SITE_DIR#, иначе будут расхождения и «странные» ответы при открытии ссылок.

Логика сводится к четырём шагам: прочитать запрошенный путь, сопоставить с масками, выбрать сценарий (список, раздел, деталь), подключить news.php, section.php или detail.php из шаблона комплексного компонента.

Передача переменных в простые компоненты

В разделе список обычно строит bitrix:news.list с привязкой к родителю:

"PARENT_SECTION" => $arResult["VARIABLES"]["SECTION_ID"],
"PARENT_SECTION_CODE" => $arResult["VARIABLES"]["SECTION_CODE"],

На детальной странице в bitrix:news.detail передают идентификатор и код из маршрута:

"ELEMENT_ID" => $arResult["VARIABLES"]["ELEMENT_ID"],
"ELEMENT_CODE" => $arResult["VARIABLES"]["ELEMENT_CODE"],

Кеш, навигация и ответ 404

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

Для SEO полезно при отсутствии материала отдавать статус 404 и специальную страницу, а не подменять выдачу списком — так не появляются мусорные дубли.

Запись в urlrewrite и права на корень

После сохранения настроек из визуального редактора в корне сайта в urlrewrite.php обычно появляется правило, направляющее запросы под префикс раздела на index.php с комплексным компонентом. Если файл копировали «руками» по FTP и правило не создалось, достаточно пересохранить компонент из админки. В ядре D7 при необходимости правила можно программно синхронизировать через API маршрутизации, но для стандартного сценария достаточно штатной записи.

array (
    'CONDITION' => '#^/novosti/#',
    'RULE' => '',
    'ID' => 'bitrix:news',
    'PATH' => '/novosti/index.php',
    'SORT' => 100,
),

Если вместо раздела видна 404

  • Проверить, что для всех макросов #SECTION_CODE# и #ELEMENT_CODE# реально заполнены коды и включена обязательность.
  • Сверить маски в инфоблоке и в компоненте построчно.
  • Убедиться, что веб-сервер отдаёт запросы в Битрикс: для Apache в .htaccess должны быть типовые правила перенаправления на bitrix/urlrewrite.php.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

Если ошибка оформлена шаблоном сайта — запрос дошёл до CMS; «сырая» страница веб-сервера указывает на конфигурацию Nginx или Apache до уровня Битрикс. Дополнительно стоит открыть файлы шаблона комплексного компонента и убедиться, что в вызовы простых компонентов не подставлены жёстко зафиксированные ID вместо значений из $arResult.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии