Страница новостей на комплексном компоненте 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 дней гарантии