В данной статье мы рассмотрим один из способов, как можно выбирать новости по годам, очень примитивный, но рабочий фильтр. В принципе, данным способом можно фильтровать и по другим параметрам.
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С-Битрикс. Надеюсь данный материал был вам полезен 🙂 .
А без перезагрузки страницы возможно?
Можно, но вам нужно будет либо дописать аякс запрос по клику, который отправит параметры на страницу (год, месяц) и результат потом заменит контентую область с новостями. Либо, в каждой новости дописать HTML атрибуты, например data-month, data-year и уже по ним фильтровать. Второй вариант попроще будет 🙂
Как отфильтровать новости только за сегодняшний день, при условии что все новости активны и есть новости на следующий день. Дополнительное свойство с датой сделала, но вот с помощью чего вывести new.list
Хороший вопрос) Два примера, один для даты активности, второй для свойства даты:
$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)),
);