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.
Содержание
- Как это работает — кратко
- Шаблон detail.php: пример кода и вызов bitrix:news.list
- Параметры фильтра и варианты фильтрации
- Частые ошибки и советы по отладке
- Источники
- Заключение
Как вывести другие новости из той же категории в 1С-Битрикс
Коротко: идея простая. На странице детального просмотра (detail.php) у вас уже есть данные текущей новости в 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
// В шаблоне 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, можно показать похожие материалы:
arResult[‘IBLOCK_ID’], ‘!ID’=>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 и блогах (см. источники).
Источники
- Новости (комплексный компонент)
- Детальный просмотр новости: шаблон страницы и компонента
- Как на странице детальной новости поставить компонент список новостей
- Вывести новости из конкретного раздела инфоблока Битрикс — заметка
- Новость детально (параметры)
- Bitrix: как вывести список новостей, исключая текущую? — Хабр Q&A
- Урок: шаблон для компонента “новости” (видеоуроки)
- Как создать страницу новостей на комплексном компоненте в Битрикс с ЧПУ
Заключение
Подытожим: самый надёжный и распространённый способ — в шаблоне detail.php установить глобальный фильтр по SECTION_ID и исключить текущий элемент через ‘!ID’, затем вызвать bitrix:news.list с FILTER_NAME => “arrFilter”. Это даёт простой, быстрый и гибко настраиваемый блок “Другие новости” для 1с битрикс новости через битрикс компонент news. Если нужно — расширяйте фильтр по свойствам, тегам или включайте подразделы; не забудьте про CACHE_FILTER и корректный шаблон для вывода.