Как разместить компонент bitrix:news в корне сайта на 1С-Битрикс: настройка ЧПУ и маршрутизации
Комплексный компонент bitrix:news в 1С-Битрикс позволяет организовать раздел новостей, блог, базу статей или другой информационный раздел на базе инфоблоков. Обычно его размещают в отдельном каталоге, например /news/index.php. Однако в некоторых проектах требуется вывести список материалов непосредственно на главной странице, а детальные страницы открывать по адресам относительно корня сайта.
Рассмотрим, как разместить компонент bitrix:news в корне сайта, настроить человекопонятные URL (ЧПУ) и избежать конфликтов с другими разделами.
Особенности размещения bitrix:news в корне сайта
При стандартном размещении компонента в каталоге /news/ параметр SEF_FOLDER имеет значение /news/. Если же компонент размещается в корневом файле /index.php, для настройки адресов относительно корня используется значение /.
При этом необходимо учитывать, что в корне сайта могут располагаться другие компоненты, разделы и отдельные страницы. Слишком общие правила обработки адресов могут перехватывать запросы, не относящиеся к новостям.
В нашем примере используем следующую структуру:
/— главная страница со списком новостей;/sections/company/— страница раздела новостей;/news-example.html— детальная страница новости.
Такой подход позволяет разместить комплексный компонент на главной странице, сохранив отдельные маршруты для разделов и материалов.
1. Подключение компонента bitrix:news в index.php
Откройте файл /index.php, расположенный в корне сайта, и добавьте вызов комплексного компонента. Если файл уже содержит другие элементы главной страницы, предварительно сохраните его резервную копию.
Пример содержимого /index.php:
<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetTitle("Новости");
$APPLICATION->IncludeComponent(
"bitrix:news",
".default",
array(
"IBLOCK_TYPE" => "news",
"IBLOCK_ID" => "1",
"NEWS_COUNT" => "20",
"CHECK_DATES" => "Y",
"USE_SEARCH" => "N",
"USE_RSS" => "N",
"USE_FILTER" => "N",
"SEF_MODE" => "Y",
"SEF_FOLDER" => "/",
"SEF_URL_TEMPLATES" => array(
"news" => "",
"section" => "sections/#SECTION_CODE_PATH#/",
"detail" => "news-#ELEMENT_CODE#.html"
),
"AJAX_MODE" => "N",
"SET_TITLE" => "Y",
"ADD_SECTIONS_CHAIN" => "Y",
"ADD_ELEMENT_CHAIN" => "Y",
"INCLUDE_IBLOCK_INTO_CHAIN" => "N",
"DISPLAY_NAME" => "Y",
"LIST_ACTIVE_DATE_FORMAT" => "d.m.Y",
"DETAIL_ACTIVE_DATE_FORMAT" => "d.m.Y",
"DISPLAY_TOP_PAGER" => "N",
"DISPLAY_BOTTOM_PAGER" => "Y",
"PAGER_TITLE" => "Новости",
"STRICT_SECTION_CHECK" => "N",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "36000000",
"CACHE_FILTER" => "N",
"CACHE_GROUPS" => "Y",
"SET_STATUS_404" => "Y",
"SHOW_404" => "Y"
),
false
);
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php");
?>
Важно: параметры IBLOCK_TYPE и IBLOCK_ID необходимо заменить на значения используемого инфоблока. Также у элементов должны быть заполнены символьные коды, поскольку они используются для формирования детальных URL.
2. Настройка ЧПУ для новостей в корне сайта
Основные параметры, отвечающие за маршрутизацию комплексного компонента:
SEF_MODE— включает режим человекопонятных адресов;SEF_FOLDER— задаёт базовый путь для формирования URL;SEF_URL_TEMPLATES— определяет адреса списка, разделов и детальных страниц.
Для размещения компонента в корне используются следующие настройки:
"SEF_MODE" => "Y",
"SEF_FOLDER" => "/",
"SEF_URL_TEMPLATES" => array(
"news" => "",
"section" => "sections/#SECTION_CODE_PATH#/",
"detail" => "news-#ELEMENT_CODE#.html"
),
Здесь #SECTION_CODE_PATH# заменяется путём раздела, а #ELEMENT_CODE# — символьным кодом элемента.
Префикс news- в адресах детальных страниц используется намеренно. Он позволяет отличать новости от других файлов и страниц, расположенных в корне сайта.
3. Настройка файла urlrewrite.php
После включения ЧПУ необходимо проверить правила обработки адресов в файле /urlrewrite.php.
При работе комплексного компонента из корня сайта особенно важно не использовать универсальное условие #^/# без необходимости. Такое правило потенциально подходит практически под любой адрес и может конфликтовать с маршрутизацией других компонентов.
Для нашего примера достаточно добавить в массив $arUrlRewrite два отдельных правила:
array(
"CONDITION" => "#^/sections/#",
"RULE" => "",
"ID" => "bitrix:news",
"PATH" => "/index.php",
"SORT" => 100,
),
array(
"CONDITION" => "#^/news-[a-z0-9_-]+\.html$#",
"RULE" => "",
"ID" => "bitrix:news",
"PATH" => "/index.php",
"SORT" => 100,
),
Обратите внимание: приведённые записи необходимо добавить внутрь существующего массива правил, а не заменять ими содержимое файла целиком.
Первое правило обрабатывает запросы к разделам новостей, второе — к детальным страницам с префиксом news-. В обоих случаях запрос передаётся в корневой /index.php, где компонент определяет нужную страницу по URL.
Если компонент автоматически зарегистрировал более широкое правило для корня сайта, его также необходимо проверить и при необходимости заменить адресными условиями. При этом остальные правила обработки URL должны сохраниться.
4. Настройка ссылок в инфоблоке
Для корректной работы новостей рекомендуется проверить настройки адресов в самом инфоблоке.
В административной панели перейдите в настройки используемого инфоблока и проверьте шаблоны URL разделов и элементов.
Для рассматриваемой структуры можно использовать:
URL страницы раздела:
#SITE_DIR#sections/#SECTION_CODE_PATH#/
URL страницы детального просмотра:
#SITE_DIR#news-#ELEMENT_CODE#.html
Эти адреса должны соответствовать структуре маршрутов, настроенной в компоненте.
Если применяется собственный шаблон news.list, дополнительно проверьте формирование ссылок. Обычно для перехода на детальную страницу следует использовать готовое значение $arItem["DETAIL_PAGE_URL"], не добавляя к нему вручную дополнительные каталоги или префиксы.
5. Проверка работы компонента
После настройки проверьте следующие сценарии:
- При открытии главной страницы
/отображается список новостей из нужного инфоблока. - Переход по адресу
/sections/company/открывает соответствующий раздел. - Адрес вида
/news-example.htmlоткрывает детальную страницу элемента. - Другие разделы сайта, например
/catalog/или/contacts/, продолжают работать. - При обращении к несуществующей новости возвращается корректный HTTP-статус 404.
Если детальная страница не открывается, проверьте символьный код элемента, настройки ЧПУ, содержимое urlrewrite.php и работу серверной обработки человекопонятных адресов.
Если вместо новости отображается главная страница либо другой компонент, следует проверить пересечения условий и порядок обработки правил маршрутизации.
6. Распространённые ошибки
Все адреса сайта обрабатываются компонентом news
Чаще всего причина заключается в слишком широком регулярном выражении в urlrewrite.php. Для комплексного компонента, размещённого в корне, рекомендуется использовать отдельные префиксы URL и максимально конкретные условия маршрутизации.
Детальная страница возвращает ошибку 404
Проверьте совпадение шаблона detail с фактическим URL, наличие символьного кода у элемента и правило маршрутизации. Также убедитесь, что элемент активен и доступен на текущем сайте.
Ссылки ведут в каталог /news/, хотя компонент находится в корне
Причиной могут быть старые настройки SEF_FOLDER, адреса в инфоблоке либо собственный шаблон компонента, в котором путь к новости прописан вручную.
После изменения ЧПУ продолжают открываться старые страницы
Проверьте актуальность правил маршрутизации, очистите кеш компонентов и убедитесь, что на сайте не используются дополнительные редиректы, формирующие прежние адреса.
Заключение
Разместить комплексный компонент bitrix:news непосредственно в корне сайта 1С-Битрикс можно без изменения его стандартной логики. Достаточно подключить компонент в /index.php, настроить SEF_FOLDER и шаблоны адресов, а также добавить необходимые правила в urlrewrite.php.
Основная сложность заключается не в подключении компонента, а в корректном распределении URL между новостями и остальными страницами сайта. Использование понятных префиксов и отдельных правил маршрутизации позволяет избежать конфликтов и сохранить удобную структуру адресов.