Битрикс: выборка новостей по категориям.

Небольшой скрипт позволяющий выбирать новости одной или нескольких разделов в инфоблоке.

$category_id_list - здесь будем хранить список айдишников выбраненных разделов.
$category_check - переменная для проверки выбраны ли какие либо разделы
Здесь проверяем выбраны какие либо конкретные разделы если да - то создаем фильтр для новостей, если нет то помечаем что выбраны все разделы.

<ul class="sortable_list">
 <li <?
 
  $category_id_list = array();
  $category_check = (!isset($_REQUEST["category"])) || ($_REQUEST["category"] == '');
  if (!$category_check) {
   $category_id_list = preg_split('/,/', $_REQUEST["category"]);
   $GLOBALS['news_filter'] = array('ACTIVE' => 'Y', 'SECTION_ID' => $category_id_list);
  } else {
   echo "class='active'";
  }
 
  ?>>
  <a href="?category=" rel="nofollow">Все</a>
 </li>


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

<?
 
 $filter = array(
  "IBLOCK_ID" => $arParams["IBLOCK_ID"]
 );
 $sort = array(
  "ID" => "DESC"
 );
 $category_list = CIBlockSection::GetList($sort, $filter); 
 
 while ($category = $category_list->GetNext()) : ?>
 <li <?
 
  if (in_array($category["ID"], $category_id_list)) {
   echo "class='active'";
   $func = "array_diff";
  } else {
   $func = "array_merge";
  }
 
  ?>>
  <a href="?category=<?=implode(',', $func($category_id_list, array($category["ID"])))?>" rel="nofollow">
   <?=$category["NAME"]?>
  </a>
 </li>
 <?endwhile;?>
</ul>

Теперь осталось только указать в параметрах новостей фильтр:

<?$APPLICATION->IncludeComponent(
 "bitrix:news.list",
 "",
 Array(
  ...
  "FILTER_NAME" => "news_filter",
  ...
 ),
 $component
);?>

Для полного счастья включаем в компоненте новостей AJAX и радуемся.

Комментарии

Популярные сообщения из этого блога

Bitrix: кнопка добавить в корзину

Битрикс: какого х*я ты ищешь в неактивных разделах

Битрикс: highloadblock значения в свойстве список