Веб

1С Битрикс: вывести другие новости из категории

Как на странице детального просмотра новости в 1С-Битрикс вывести список других новостей из той же категории с помощью компонента bitrix:news.list. Пошаговая инструкция, код для detail.php, фильтры и советы по кэшу.

Как в 1С-Битрикс на странице детального просмотра новости вывести список других новостей из той же категории, используя компонент bitrix:news?

Чтобы на странице детальной новости в 1С-Битрикс вывести список других новостей из той же категории, в шаблоне detail.php комплексного компонента bitrix:news определите глобальный фильтр по SECTION_ID и исключите текущий элемент (‘!ID’ => $arResult[‘ID’]), затем вызовите компонент bitrix:news.list с параметром FILTER_NAME => “arrFilter”. Ниже — пошаговая инструкция, готовый пример кода и рекомендации по параметрам, кэшу и типичным ошибкам для корректного вывода 1с битрикс новости через битрикс компонент news.


Содержание


Как вывести другие новости из той же категории в 1С-Битрикс

Коротко: идея простая. На странице детального просмотра (detail.php) у вас уже есть данные текущей новости в arResult.БерёмIDраздела(arResult. Берём ID раздела (arResult[‘IBLOCK_SECTION_ID’]), формируем глобальный фильтр и вызываем компонент bitrix:news.list, который покажет другие элементы инфоблока по этому фильтру. Такой подход описан в официальной документации по компоненту и часто используется в практических примерах (см. официальную документацию и учебные материалы ниже).

Зачем так делать? Потому что комплексный компонент bitrix:news предназначен для связки detail + list: вы уже получили контекст (IBLOCK, раздел, ID) — просто используйте его для отбора родственных материалов. Результат — простая логика, быстрая фильтрация и единая стилизация через шаблон news.list.

Короткая последовательность действий:

  • Откройте шаблон detail.php комплексного компонента bitrix:news (обычно в /bitrix/components/bitrix/news/templates/ваш_шаблон/).
  • Получите ID раздела из $arResult (или вычислите запасной вариант).
  • Сформируйте $GLOBALS[‘arrFilter’] = array(‘IBLOCK_ID’ => …, ‘SECTION_ID’ => …, ‘!ID’ => …).
  • Включите компонент bitrix:news.list с параметром “FILTER_NAME” => “arrFilter” и нужными настройками (NEWS_COUNT, сортировка, кеш).
  • Стилизуйте отдельный шаблон news.list (например, other_news) под блок «Другие новости».

Подробный пример — ниже. Для справки по параметрам смотрите официальную документацию компонента: Новости (комплексный компонент) и материал про детальный вывод: Новость детально.


Шаблон detail.php: вставка bitrix:news.list и битрикс компонент news

Ниже — рабочий пример кода, который вставляется в шаблон detail.php после основного вывода детальной новости. Этот код определяет фильтр по разделу и исключает текущую новость по ID.

php
<?php
// В шаблоне detail.php комплексного компонента bitrix:news
// Получаем ID раздела (страховка на случай, если поле хранится в другой форме)
$sectionId = isset($arResult['IBLOCK_SECTION_ID']) ? $arResult['IBLOCK_SECTION_ID'] : null;
if (!$sectionId && isset($arResult['SECTION']['ID'])) {
 $sectionId = $arResult['SECTION']['ID'];
}

// Формируем глобальный фильтр — имя строки фильтра передаём в параметре FILTER_NAME
$GLOBALS['arrFilter'] = array(
 "IBLOCK_ID" => $arResult['IBLOCK_ID'],
 "SECTION_ID" => $sectionId,
 "!ID" => $arResult['ID'], // исключаем текущую новость
 "ACTIVE" => "Y"
);

// Включаем список новостей — шаблон "other_news" можно создать свой
$APPLICATION->IncludeComponent(
 "bitrix:news.list",
 "other_news", // название шаблона (или "" для стандартного)
 array(
 "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
 "IBLOCK_ID" => $arParams["IBLOCK_ID"],
 "NEWS_COUNT" => "4",
 "SORT_BY1" => "ACTIVE_FROM",
 "SORT_ORDER1" => "DESC",
 "FILTER_NAME" => "arrFilter",
 "FIELD_CODE" => array("NAME","PREVIEW_TEXT","PREVIEW_PICTURE"),
 "PROPERTY_CODE" => array(),
 "CACHE_TYPE" => "A",
 "CACHE_TIME" => "3600",
 "CACHE_FILTER" => "Y", // важно при использовании фильтра
 "CACHE_GROUPS" => "Y",
 "DISPLAY_BOTTOM_PAGER" => "N"
 ),
 $component // передаём $component, чтобы вложенный компонент использовал контекст и кеш родителя
);
?>

Пояснения по важным моментам:

  • FILTER_NAME — это строка с именем глобальной переменной; сам массив должен быть доступен в $GLOBALS (поэтому мы используем $GLOBALS[‘arrFilter’]).
  • ‘!ID’ => $arResult[‘ID’] исключает текущий элемент — без этого он появится в списке.
  • CACHE_FILTER => “Y” необходим, чтобы кеш учитывал фильтр; иначе можно получить неправильные (закешированные) результаты.
  • $component в конце передаётся для корректного вложенного кеширования и управления кешем комплексного компонента.
  • Шаблон “other_news” создайте отдельным в папке templates/news.list — так вы не затрёте основной шаблон.

Если нужно — можно управлять DETAIL_URL и ссылками через шаблон news.list, а также передавать дополнительные параметры (например, INCLUDE_SUBSECTIONS или PARENT_SECTION) — подробнее в документации и уроках: Детальный просмотр новости: шаблон страницы и компонента.


Параметры фильтра и варианты фильтрации (фильтр новостей битрикс, 1с битрикс инфоблок)

Фильтровать по разделу — самый распространённый и быстрый вариант. Но бывают другие сценарии:

  • По тегам/свойствам: если у новостей есть свойство TAGS, можно показать похожие материалы:
    GLOBALS[arrFilter]=[IBLOCKID=>GLOBALS['arrFilter'] = ['IBLOCK_ID'=>arResult[‘IBLOCK_ID’], ‘!ID’=>arResult[ID],PROPERTYTAGS=>arResult['ID'], 'PROPERTY_TAGS'=>arResult[‘PROPERTIES’][‘TAGS’][‘VALUE’]];

  • По разделу и дочерним разделам: используйте параметр INCLUDE_SUBSECTIONS => “Y” (если компонент поддерживает) или расширьте фильтр массивом ID разделов.

  • Если у элемента несколько разделов: $arResult может содержать массив разделов; выберите нужный раздел или соберите массив ID и примените фильтр ‘SECTION_ID’ => $arrayOfSectionIds.

  • Альтернативы: bitrix:news.line или bitrix:catalog.section (в особых настройках) — если нужна выдача по нескольким инфоблокам или сложная сортировка.

Подумайте, что важнее: релевантность или скорость? Фильтрация по свойствам даёт более «умные» рекомендации, но требует дополнительных запросов и тестов. Иногда достаточно простого отбора по SECTION_ID — и это будет быстро и предсказуемо.

Совет по SEO/ЧПУ: если у вас настроены ЧПУ и шаблоны URL, убедитесь, что ссылки в news.list формируются через DETAIL_URL или через $arResult[‘FOLDER’] и $arResult[‘URL_TEMPLATES’][‘detail’] в шаблоне комплексного компонента — так не потеряете единообразие ссылок (см. пример настройки ЧПУ в источниках).


Частые ошибки и советы по отладке (битрикс вывод новостей)

Что чаще всего ломает вывод и как это быстро поправить?

  • Неправильно объявлен фильтр: используйте именно $GLOBALS[‘arrFilter’] или другое глобальное имя и указывайте это имя в FILTER_NAME — иначе компонент не увидит массив.
  • Забыт ‘!ID’ — текущая новость появится в списке. Проверьте, что используете восклицательный оператор.
  • Неправильный IBLOCK_ID: лучше брать $arParams[“IBLOCK_ID”] или $arResult[“IBLOCK_ID”] из текущего контекста, иначе фильтр будет по другому инфоблоку.
  • Кеширование: если CACHE_FILTER=“N”, компонент может отдавать закешированные результаты без учёта фильтра. Поставьте “CACHE_FILTER”=>“Y”.
  • Путь шаблона: если создаёте свой шаблон для news.list, не забудьте разместить его корректно и очистить кеш (Ctrl+F5 / очистка кеша в админке) при проверке.
  • Пустой SECTION_ID: некоторые элементы могут не иметь раздела — предусмотрите fallback (например, фильтрацию по тегам или показ общих материалов).
  • Отладка: используйте var_dump($GLOBALS[‘arrFilter’]); exit; чтобы убедиться, что фильтр сформирован правильно.

Быстрая проверка: временно уменьшите NEWS_COUNT до 1 и включите вывод ID и SECTION_ID в шаблоне news.list — так легче увидеть, что именно отбирается.

Нужны примеры от сообщества? Посмотрите практические ответы и примеры кода на StackOverflow и блогах (см. источники).


Источники


Заключение

Подытожим: самый надёжный и распространённый способ — в шаблоне detail.php установить глобальный фильтр по SECTION_ID и исключить текущий элемент через ‘!ID’, затем вызвать bitrix:news.list с FILTER_NAME => “arrFilter”. Это даёт простой, быстрый и гибко настраиваемый блок “Другие новости” для 1с битрикс новости через битрикс компонент news. Если нужно — расширяйте фильтр по свойствам, тегам или включайте подразделы; не забудьте про CACHE_FILTER и корректный шаблон для вывода.

Авторы
Проверено модерацией
Модерация