1С-Битрикс

Как в Битрикс вывести все элементы (активные и неактивные) через news.list

Как в Битрикс вывести все элементы (активные и неактивные) через компонент news.list. Два рабочих варианта с кодом и объяснением особенностей

sqlka.ruОпубликовано: Чтение: 4 мин.
Как в Битрикс вывести все элементы (активные и неактивные) через news.list

Стандартный компонент bitrix:news.list по умолчанию показывает только активные элементы инфоблока. Однако в некоторых ситуациях необходимо отображать все записи, включая деактивированные — например, при предварительном просмотре, в административных разделах или для определённых групп пользователей. В этой статье рассмотрим два эффективных способа решения этой задачи.

Почему news.list не показывает неактивные элементы?

По умолчанию в компоненте установлен внутренний фильтр "ACTIVE" => "Y". Это сделано для того, чтобы на публичной части сайта случайно не отображались черновики, архивные или временно скрытые материалы. Однако эту настройку можно переопределить с помощью параметра FILTER_NAME.

Вариант 1: Отключение фильтрации по активности

Этот способ полностью отключает проверку активности элементов. В фильтре мы указываем пустое значение для поля ACTIVE, что означает "не фильтровать по этому полю".

Код для размещения перед вызовом компонента:

<?php
// Создаем глобальный фильтр
global $arrFilterAllElements;
$arrFilterAllElements = array(
    "ACTIVE" => "", // Пустое значение отключает фильтрацию
);
?>

Настройки компонента:

<?php
$APPLICATION->IncludeComponent(
    "bitrix:news.list",
    "ваш_шаблон",
    array(
        "FILTER_NAME" => "arrFilterAllElements", // Указываем имя нашего фильтра
        // остальные параметры компонента...
    )
);
?>

Вариант 2: Явное указание всех статусов

Более явный способ — указать, что нас интересуют элементы со статусами и "Y" (активен), и "N" (не активен). Этот подход понятнее для других разработчиков и позволяет при необходимости легко модифицировать фильтр.

Код для размещения перед вызовом компонента:

<?php
global $arrFilterBothStatuses;
$arrFilterBothStatuses = array(
    "ACTIVE" => array("Y", "N"), // Явно указываем оба статуса
);
?>

Настройки компонента:

<?php
$APPLICATION->IncludeComponent(
    "bitrix:news.list",
    "ваш_шаблон",
    array(
        "FILTER_NAME" => "arrFilterBothStatuses",
        // остальные параметры...
    )
);
?>

Важные технические нюансы

1. Производительность

Оба способа снимают ограничение по активности, что означает:

  • Увеличение количества обрабатываемых записов — база данных будет выбирать больше строк
  • Возможное замедление работы на инфоблоках с большим количеством элементов (десятки тысяч)
  • Рекомендация: всегда используйте пагинацию ("DISPLAY_TOP_PAGER" => "Y", "DISPLAY_BOTTOM_PAGER" => "Y") и ограничивайте количество элементов на странице ("NEWS_COUNT")

2. Дополнительные условия фильтра

Если у вас уже есть собственный фильтр, можно просто добавить к нему условие по активности:

<?php
global $arrFilterCustom;
$arrFilterCustom = array(
    "PROPERTY_CATEGORY" => 25, // Ваше существующее условие
    "ACTIVE" => array("Y", "N"), // Добавляем условие по активности
);
?>

3. Уникальные имена фильтров

Используйте уникальные имена для фильтров (как в примерах выше — $arrFilterAllElements, $arrFilterBothStatuses), чтобы избежать конфликтов с другими компонентами на странице.

4. Кеширование

При использовании такого фильтра компонент будет кешировать результат отдельно от стандартного вызова. Убедитесь, что параметр CACHE_TIME установлен адекватно вашим потребностям.

Когда использовать каждый из способов?

Вариант Когда использовать Особенности
Вариант 1 (ACTIVE => "") Когда нужно полностью отключить фильтрацию по активности, не задумываясь о статусах Более универсальный, работает быстрее на очень больших выборках
Вариант 2 (ACTIVE => array("Y", "N")) Когда важно явно указать, какие статусы нас интересуют Прозрачнее для понимания, позволяет легче модифицировать в будущем

Альтернативный подход

Если вам нужно показывать неактивные элементы только определённым группам пользователей (например, редакторам), можно добавить проверку прав:

<?php
global $arrFilter;
if ($USER->IsAuthorized() && $USER->IsAdmin()) {
    $arrFilter = array("ACTIVE" => array("Y", "N"));
} else {
    $arrFilter = array("ACTIVE" => "Y");
}
?>

Заключение и рекомендации

Оба представленных способа эффективно решают задачу отображения всех элементов инфоблока. Для большинства случаев достаточно Варианта 1 — он проще и быстрее. Вариант 2 стоит использовать, когда важна максимальная прозрачность кода или когда возможны дальнейшие модификации фильтра.

Важно: После применения этих методов обязательно проверьте, как работает пагинация, сортировка и дополнительные свойства элементов.

Для проектов, где регулярно требуется работа с большими объёмами данных и нестандартными выборками, важно иметь качественную инфраструктуру. Оптимальная работа компонентов Битрикс во многом зависит от производительности сервера и правильно настроенной базы данных. Например, при использовании FirstVDS с промокодом 6481180955 можно получить не только надежный хостинг, но и дополнительные ресурсы для обработки сложных запросов, что особенно актуально при работе с фильтрами, затрагивающими тысячи записей.

Хотите освоить SQL для работы с данными?

В SQLka можно изучать SQL последовательно или готовиться к собеседованиям. Запросы выполняются прямо в браузере — устанавливать базу данных не нужно.

sqlka.ru

support@sqlka.ru

Дальше по теме

1С-Битрикс

Логирование в 1С-Битрикс: полное руководство для разработчика

Полное руководство по логированию в 1С-Битрикс: какие логгеры есть, как их настроить, форматировать сообщения и подключать к своим классам. Примеры кода и советы по использованию PSR-3

sqlka.ruЧтение: 4 мин.
← Все статьи