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

В данной статье мы рассмотрим один из способов, как можно выбирать новости по годам, очень примитивный, но рабочий фильтр. В принципе, данным способом можно фильтровать и по другим параметрам.

1С-Битрикс — как применить фильтр для элементов по конкретному году

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

Но нам все равно его нужно прописать прямо перед вызовом компонента. Итак, посмотрим на наш код:

<div class="filter-block">
	<a href="?day=all&clear_cache=Y" class="filter<?if($_GET['day'] == 'all'){?> filter-active<?}?>">Все</a>
	<a href="?year=2016&clear_cache=Y" class="filter<?if($_GET['year'] == 2016){?> filter-active<?}?>">2016</a>
	<a href="?year=2015&clear_cache=Y" class="filter<?if($_GET['year'] == 2015){?> filter-active<?}?>">2015</a>
	<a href="?year=2014&clear_cache=Y" class="filter<?if($_GET['year'] == 2014){?> filter-active<?}?>">2014</a>
</div>

По нажатию на эти ссылки, наша страница будет обновляться, и, в массив $_GET добавятся значения переменных, но нас интересует год. Также, в зависимости от года будет активный класс, что поможет применить CSS. Теперь пишем фильтр для наших новостей:

<?
if (!empty($_GET['year'])) { //проверяем есть ли у нас в строке GET переменная year
	global $arrFilter; //глобальная переменная фильтра

	$firstMonth = '01.01.'.$_GET['year']; //начало года
	$lastMonth = '31.12.'.$_GET['year']; //конец года

	$arrFilter = array(
		"LOGIC" => "AND",
		array(">=DATE_ACTIVE_FROM" => ConvertTimeStamp(strtotime($firstMonth),"FULL")),
		array("<=DATE_ACTIVE_FROM" => ConvertTimeStamp(strtotime($lastMonth),"FULL")),
	);
}
?>

<?$APPLICATION->IncludeComponent("bitrix:news.list", "", array());?>

Что тут важно понять:
1.
Фильтр вы пишите перед вызовом компонента, из проверки следует, что он включится только тогда, когда мы передадим переменную year в массив $_GET
2. Чтобы ваш компонент понял, что к нему применяется фильтр, указывайте при вызове в его параметрах:

"USE_FILTER" => "Y",
"FILTER_NAME" => "arrFilter",

Это один из вариантов того, как можно фильтровать новости или любые другие элементы в 1С-Битрикс. Надеюсь данный материал был вам полезен 🙂 .

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

- Создание сайтов на 1С-Битрикс любой сложности
- Вёрстка макетов Figma, Photoshop, Zeplin
- Поддержка проектов на Битриксе
- Разработка нового функционала для сайта
- Парсинг данных
- Выгрузка из файлов в формате XML, YML, XLS, XLSX, CSV, JSON
- Интеграция по API со сторонними сервисами
и многое другое

E-mail: dmitriyribka@gmail.com

4 комментария

    1. Можно, но вам нужно будет либо дописать аякс запрос по клику, который отправит параметры на страницу (год, месяц) и результат потом заменит контентую область с новостями. Либо, в каждой новости дописать HTML атрибуты, например data-month, data-year и уже по ним фильтровать. Второй вариант попроще будет 🙂

  1. Как отфильтровать новости только за сегодняшний день, при условии что все новости активны и есть новости на следующий день. Дополнительное свойство с датой сделала, но вот с помощью чего вывести new.list

    1. Хороший вопрос) Два примера, один для даты активности, второй для свойства даты:
      $firstMonth = ‘18.03.2021’; // тут вам нужно в таком же формате вывести дату при помощи date, например так date(‘d.m.Y’)
      $arrFilterTask[] = array(
      «DATE_ACTIVE_FROM» => ConvertTimeStamp(strtotime($firstMonth),»FULL»),
      );
      $arrFilterPay[] = array(
      «PROPERTY_DATE» => FormatDate(«Y-m-d», MakeTimeStamp($firstMonth)),
      );

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *