В данной статье рассматривается практический метод организации фильтрации новостного контента по годам в 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С-Битрикс. Представленное решение может быть легко модифицировано: например, можно создать динамический список годов на основе самых старых и самых новых записей в каталоге или расширить функционал, добавив фильтрацию по месяцам или категориям.