bitrix:news — это комплексный компонент, который объединяет список и детальную страницу новостей и умеет работать в режиме ЧПУ. Ниже — как менять его вывод, не ломая обновления ядра и не переписывая логику с нуля.
Как устроен bitrix:news
Компонент bitrix:news — комплексный: он сам не выбирает данные, а вызывает вложенные простые компоненты в зависимости от текущего URL. Внутри работают:
bitrix:news.list— список новостей раздела;bitrix:news.detail— детальная страница элемента;bitrix:news.lineиbitrix:news.rss— бегущая строка и RSS-экспорт.
За разбор адреса отвечает SEF-режим: массив arDefaultUrlTemplates404 сопоставляет шаблоны URL (list, section, detail) с внутренними страницами. Понимание этой схемы — ключ к аккуратной кастомизации: чаще всего вам нужен не сам комплексный компонент, а шаблоны вложенных.
/bitrix/components/bitrix/news/. Их нельзя править напрямую — при обновлении платформы изменения затрутся.Копирование шаблона в свой namespace
Первый шаг любой кастомизации — вынести шаблон из bitrix в свой каталог. В визуальном редакторе это кнопка «Копировать шаблон», вручную — копирование папки:
/bitrix/components/bitrix/news.list/templates/.default/ → /local/templates/main/components/bitrix/news.list/my_list/
После копирования в настройках комплексного компонента задайте имя шаблона для соответствующего вложенного. Структура папки шаблона:
template.php— вёрстка и вывод;result_modifier.php— постобработка$arResult;component_epilog.php— код вне кэша (счётчики просмотров, хлебные крошки);style.css,script.js— подключаются автоматически.
/local/, а не в /bitrix/. Каталог /local/ не перезаписывается обновлениями и переносится вместе с проектом.Вывод дополнительных свойств инфоблока
Чтобы вывести пользовательское свойство (например, AUTHOR или SUBTITLE), сначала добавьте его код в параметр компонента PROPERTY_CODE[]. После этого оно попадёт в $arResult и станет доступно в шаблоне:
<?php if (!empty($arItem['DISPLAY_PROPERTIES']['AUTHOR']['VALUE'])): ?>
<span class="author"><?=$arItem['DISPLAY_PROPERTIES']['AUTHOR']['VALUE']?></span>
<?php endif ?>
Разница между ключами важна:
| Ключ | Что содержит |
|---|---|
PROPERTIES | сырое значение свойства как в БД |
DISPLAY_PROPERTIES | готовое к выводу значение (списки, HTML, ссылки) |
Для свойств типа «Список» и «Привязка к элементу» используйте именно DISPLAY_PROPERTIES — там уже подставлены человекочитаемые значения.
Постобработка через result_modifier.php
Когда данных из коробки не хватает, а лезть в component.php нельзя, весь дополнительный код выносят в result_modifier.php. Он выполняется внутри кэша и получает готовый $arResult. Типичный пример — вычислить время чтения:
<?php
foreach ($arResult['ITEMS'] as $k => &$item) {
$item['READ_TIME'] = (int)ceil(mb_strlen(strip_tags($item['PREVIEW_TEXT'])) / 1000);
}
unset($item);
Поскольку код внутри кэша, тяжёлые запросы к БД здесь безопасны: они выполнятся один раз и лягут в кэш вместе с результатом. Если нужен код вне кэша (например, инкремент счётчика показов на каждый хит) — используйте component_epilog.php.
result_modifier.php доступен объект $this — экземпляр шаблона (CBitrixComponentTemplate), а через $this->__component — сам компонент.SEF-режим, хлебные крошки и заголовок
В комплексном режиме компонент сам управляет заголовком страницы и навигационной цепочкой. За это отвечают параметры:
SET_TITLE = Y— устанавливает заголовок страницы из названия элемента/раздела;ADD_SECTIONS_CHAIN = Y— добавляет разделы инфоблока в хлебные крошки;ADD_ELEMENT_CHAIN = Y— добавляет имя элемента на детальной.
Если нужно вмешаться в заголовок вручную, из шаблона детальной это делают так:
$APPLICATION->SetTitle($arResult['NAME']);
$APPLICATION->AddChainItem($arResult['NAME'], $arResult['DETAIL_PAGE_URL']);
Ссылки строятся из шаблонов URL, заданных в настройках комплексного компонента (SEF_URL_TEMPLATES). Меняя их, вы меняете ЧПУ без правки кода — например, делаете #SECTION_CODE_PATH#/#ELEMENT_CODE#/ вместо ID.
SEO-свойства и мета-теги
Битрикс умеет хранить SEO-шаблоны прямо в настройках инфоблока (вкладка «SEO»). Компонент новостей подхватывает их автоматически, если включены соответствующие параметры:
| Параметр | Тег |
|---|---|
SET_BROWSER_TITLE | <title> |
SET_META_KEYWORDS | meta keywords |
SET_META_DESCRIPTION | meta description |
Значения берутся из свойств элемента, привязанных в SEO-настройках инфоблока к соответствующим тегам. Если нужно переопределить мета-теги из шаблона, используйте $APPLICATION->SetPageProperty('description', ...) в component_epilog.php, чтобы значение не закэшировалось намертво.
Итог
Кастомизация bitrix:news строится на трёх принципах: копируем шаблоны вложенных компонентов в /local/, дообогащаем данные в result_modifier.php, а код вне кэша выносим в component_epilog.php. Дополнительные поля добавляются через PROPERTY_CODE, а ЧПУ и мета-теги настраиваются параметрами без правки логики.
Если новостной раздел перерастает в сложный контент-хаб с фильтрами, тегами и интеграциями, мы в B2Bsite помогаем спроектировать архитектуру и взять такой проект на поддержку с прозрачным SLA — без риска потерять правки при следующем обновлении платформы.
Частые вопросы
Можно ли редактировать файлы компонента в /bitrix/components/bitrix/news/?
Нет. Это файлы ядра, они перезаписываются при обновлении платформы. Копируйте шаблон в /local/templates/ и правьте копию.
Чем result_modifier.php отличается от component_epilog.php?
result_modifier.php выполняется внутри кэша и дообогащает $arResult один раз. component_epilog.php выполняется на каждом хите вне кэша — туда выносят счётчики и то, что должно меняться постоянно.
Как вывести своё свойство инфоблока в списке новостей?
Добавьте код свойства в параметр PROPERTY_CODE[] компонента, после чего оно появится в $arResult в ключах PROPERTIES и DISPLAY_PROPERTIES.
Почему свойство типа «Список» выводит число вместо текста?
Вы обращаетесь к PROPERTIES, где хранится ID значения. Для человекочитаемого текста используйте DISPLAY_PROPERTIES.
Как поменять вид ЧПУ новостей без правки кода?
Измените шаблоны URL в настройках комплексного компонента (SEF_URL_TEMPLATES). Компонент сам пересоберёт ссылки по новым шаблонам.
Кто устанавливает заголовок страницы и хлебные крошки?
Сам комплексный компонент при включённых параметрах SET_TITLE, ADD_SECTIONS_CHAIN и ADD_ELEMENT_CHAIN. Вручную можно дополнить через SetTitle и AddChainItem.
Как подтянуть SEO-мета-теги из инфоблока?
Настройте SEO-шаблоны на вкладке инфоблока и включите параметры SET_BROWSER_TITLE, SET_META_KEYWORDS, SET_META_DESCRIPTION у компонента.
Поможем с настройкой и поддержкой Для разработчиков
Поможем с настройкой, доработкой и поддержкой Для разработчиков.