В этой статье разберём простой, но эффективный способ фильтрации новостей по годам в CMS 1С-Битрикс. Этот метод также можно адаптировать для сортировки по другим параметрам.
Как работает фильтр в Битрикс?
Многие компоненты Битрикс поддерживают фильтрацию через arrFilter. Некоторые компоненты позволяют задать параметры фильтра прямо в настройках, но часто требуется прописать его вручную перед вызовом компонента.
Шаг 1. Создание блока фильтрации
Добавим блок с ссылками для выбора года:
<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 передаётся выбранный год.
-
Активный год выделяется классом filter-active (для стилизации).
Шаг 2. Настройка фильтра для компонента
Перед вызовом компонента добавляем фильтр:
<?
if (!empty($_GET['year']) && $_GET['year'] != 'all') {
global $arrFilter;
$firstDay = '01.01.' . $_GET['year']; // Начало года
$lastDay = '31.12.' . $_GET['year']; // Конец года
$arrFilter = [
"LOGIC" => "AND",
[">=DATE_ACTIVE_FROM" => ConvertTimeStamp(strtotime($firstDay), "FULL")],
["<=DATE_ACTIVE_FROM" => ConvertTimeStamp(strtotime($lastDay), "FULL")]
];
}
?>
<?$APPLICATION->IncludeComponent(
"bitrix:news.list",
"",
[
"USE_FILTER" => "Y",
"FILTER_NAME" => "arrFilter",
// Другие параметры компонента
]
);?>Ключевые моменты:
-
Фильтр применяется только при наличии $_GET['year'].
-
Для работы фильтра в компоненте должны быть включены параметры:
-
"USE_FILTER" => "Y" -
"FILTER_NAME" => "arrFilter"
-
Вывод
Этот метод позволяет легко фильтровать новости по годам в 1С-Битрикс. Его можно доработать, добавив динамическое формирование списка годов или расширив фильтрацию по месяцам.