@VladimirBolotov

Как настроить фильтр новостей в битрикс?

Добрый день!
Сайт на битрикс. Есть страница с новостями. Нужен фильтр по годам обязательно с select и option.
Вот мой код фильтра.
<?
$arrNews = CIBlockElement::GetList(array('ACTIVE_FROM'=>'DESC'),array('IBLOCK_ID'=>14, 'ACTIVE'=>'Y', 'ACTIVE_DATE'=>'Y'));
while ($prodtype = $arrNews->GetNext()):
// записываем в масив года и месяцы в формате "год-месяц"
$arrYear[] = substr($prodtype['ACTIVE_FROM'],6,4).'-'.substr($prodtype['ACTIVE_FROM'],3,2);
endwhile;

//Убираем из масива повторяющиеся елементы
$resultYear = array_keys(array_count_values($arrYear));
$resultYear = array_reverse($resultYear);
?>

select onchange="window.location=this.value"
<?
// Выводим года за которые есть новости
for($i = 0; $i < sizeof($resultYear); $i++):

$cYear = substr($resultYear[$i],0,4);// Выделяем год

if ($cc == $cYear): // Если год ещё не повторялся то выводим его !=
//$linkYear = $cYear; // Переписваеваем для того что бы формировать ссылки
continue;
endif;
$linkYear = $cYear;
//Выводим год со ссылками
echo 'option value="'.SITE_DIR.'/news/?year='.$linkYear.'" '.$cYear.'/option';

$cc = $cYear; // Переписваеваем для контроля повторения года
endfor;
?>
/select
Проблема в select и option.
На сайте есть новости за 2015 и 2016 года. На стартовой странице этот фильтр стоит на 2016 году. Я нажимаю на свой выпадающий список, нажимаю 2015 и он показывает новости за 2015. Но само значение окна select не меняется (должен показывать: 2015), также остается на 2016. И на новости 2016 года я уже перейти не могу.
Не пойму ,что сделать, чтобы фильтр корректно работал. Помогите, пожалуйста.
Спасибо!
  • Вопрос задан
  • 2888 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rema1ns
@Rema1ns
и так сойдет
Конечно странное решение, да и еще и с кешем дружить не будет. Почему не взять комплексный компонент новостей?

Для того что бы вам помочь, надо знать в каких компонентах какой код выполняется. И как у вас генериться select с годами, скорее всего у вас нет условия под текущий год, которое сделает нужный опшин активным.
Ответ написан
Комментировать
@VladimirBolotov Автор вопроса
Это костыль для bitrix.news.list. Я просто кладу этот код в result modifire и все.
У меня есть еще вариант.
<?
$arSelect = Array("DATE_ACTIVE_FROM");
$arFilter = Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"], "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect);
while($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
$years[] = date("Y", strtotime($arFields['DATE_ACTIVE_FROM']));
}
$years = array_unique($years);
arsort($years);
?>
select onchange="window.location=this.value"
<?
foreach($years as $year) {
echo 'option value="'.$APPLICATION->GetCurPage().'?year='.$year.'">'.$year.'/option';
}
?>
/select
Этот код я прописываю в шаблоне bitrix news list
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы