Добрый день!
Сайт на битрикс. Есть страница с новостями. Нужен фильтр по годам обязательно с 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;
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 года я уже перейти не могу.
Не пойму ,что сделать, чтобы фильтр корректно работал. Помогите, пожалуйста.
Спасибо!
Конечно странное решение, да и еще и с кешем дружить не будет. Почему не взять комплексный компонент новостей?
Для того что бы вам помочь, надо знать в каких компонентах какой код выполняется. И как у вас генериться select с годами, скорее всего у вас нет условия под текущий год, которое сделает нужный опшин активным.
Это костыль для 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