Автоматизация
Внедрение битрикс24 бесплатно
При покупке лицензии у меня
Подробнее
Назад

Как настроить фильтрацию новостей по годам в 1С-Битрикс

Как настроить фильтрацию новостей по годам в 1С-Битрикс
Как настроить фильтрацию новостей по годам в 1С-Битрикс

В данной статье рассматривается практический метод организации фильтрации новостного контента по годам в CMS 1С-Битрикс. Предложенный алгоритм действий позволяет реализовать удобную навигацию по архивам и может быть адаптирован для сортировки материалов по различным временным периодам или другим параметрам.

Принцип работы фильтрации в Битрикс

Большинство компонентов 1С-Битрикс, таких как news.list или catalog.section, поддерживают механизм фильтрации данных с помощью специального массива arrFilter. Некоторые комплексные компоненты предоставляют возможность задать параметры отбора непосредственно в визуальных настройках. Однако для более гибкой и нестандартной фильтрации, как в случае с выбором произвольного года, требуется предварительная подготовка массива фильтра в коде страницы перед вызовом компонента.

Шаг 1. Создание интерфейса фильтрации

Первым этапом необходимо создать на странице блок элементов управления, с помощью которых посетитель будет задавать критерий отбора. Для фильтрации по годам оптимально использовать набор ссылок.

Пример HTML-структуры и PHP-логики:

<div class="filter-block">
    <a href="?year=all&clear_cache=Y" class="filter<?= ($_GET['year'] == 'all') ? ' filter-active' : '' ?>">Все</a>
    <a href="?year=2023&clear_cache=Y" class="filter<?= ($_GET['year'] == '2023') ? ' filter-active' : '' ?>">2023</a>
    <a href="?year=2022&clear_cache=Y" class="filter<?= ($_GET['year'] == '2022') ? ' filter-active' : '' ?>">2022</a>
    <a href="?year=2021&clear_cache=Y" class="filter<?= ($_GET['year'] == '2021') ? ' filter-active' : '' ?>">2021</a>
</div>

Пояснения к коду:

  • При нажатии на ссылку происходит GET-запрос к текущей странице с передачей параметра year.

  • Конструкция clear_cache=Y добавляется для сброса кеша компонента при смене фильтра, что гарантирует отображение актуальных данных.

  • Условие $_GET['year'] == '2023' проверяет, какой год выбран в данный момент. При совпадении к ссылке добавляется CSS-класс filter-active, что позволяет визуально выделить активный фильтр для пользователя.

Шаг 2. Программирование логики фильтра

Для того чтобы компонент учитывал выбранный год, необходимо сформировать массив $arrFilter с правильными условиями. Этот код размещается непосредственно перед вызовом компонента.

Пример подготовки массива фильтра:

<?
// Проверка: передан ли параметр year и не равен ли он "all"
if (!empty($_GET['year']) && $_GET['year'] != 'all') {
    global $arrFilter; // Объявляем массив глобальным для доступа из компонента
    
    $selectedYear = intval($_GET['year']); // Приводим значение к целому числу для безопасности
    
    $firstDay = '01.01.' . $selectedYear; // Начальная граница периода
    $lastDay = '31.12.' . $selectedYear;  // Конечная граница периода
    
    // Формирование фильтра по дате
    $arrFilter = [
        "LOGIC" => "AND", // Логическое "И" между условиями
        [
            ">=DATE_ACTIVE_FROM" => ConvertTimeStamp(strtotime($firstDay), "FULL")
            // Отбираем элементы с датой начала активности больше или равной первому дню года
        ],
        [
            "<=DATE_ACTIVE_FROM" => ConvertTimeStamp(strtotime($lastDay), "FULL")
            // Отбираем элементы с датой начала активности меньше или равной последнему дню года
        ]
    ];
    
    // Важное дополнение: для исключения элементов с пустой датой начала активности
    // можно добавить условие "!DATE_ACTIVE_FROM" => false
}
?>

Ключевые моменты реализации:

  • Использование функции ConvertTimeStamp необходимо для приведения Unix-метки времени к корректному формату базы данных 1С-Битрикс.

  • Параметр LOGIC со значением AND гарантирует, что элемент попадет в выборку, только если его дата попадает в интервал между началом и концом года.

  • Приведение GET-параметра к числу (intval) является важной практикой безопасности, предотвращающей возможные инъекции.

Шаг 3. Интеграция фильтра с компонентом

Заключительный шаг — передача подготовленного массива в компонент, выводящий список новостей. Для этого у компонента должны быть включены соответствующие настройки.

Пример вызова компонента:

<?$APPLICATION->IncludeComponent(
    "bitrix:news.list", // Используемый компонент
    "", // Имя шаблона (можно указать свой)
    Array(
        // Параметры выборки данных
        "USE_FILTER" => "Y",        // Обязательно: включить использование фильтра
        "FILTER_NAME" => "arrFilter", // Обязательно: имя массива с параметрами фильтра
        "IBLOCK_ID" => "1",          // ID информационного блока с новостями
        "NEWS_COUNT" => "10",         // Количество новостей на странице
        // ... другие параметры компонента (сортировка, кеширование и т.д.)
    )
);?>

Заключение

Описанный метод обеспечивает простую и эффективную фильтрацию элементов информационного блока по годам в 1С-Битрикс. Представленное решение может быть легко модифицировано: например, можно создать динамический список годов на основе самых старых и самых новых записей в каталоге или расширить функционал, добавив фильтрацию по месяцам или категориям.

Хотите получить больше, чем просто фильтр по годам?

Расскажите нам о задачах вашего бизнеса. Мы разработаем удобную систему навигации по каталогу или блогу, настроим сложную выборку элементов и автоматизируем работу с контентом.

Обсудить доработку сайта
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи