линия

Главная

понедельник, 2 октября 2017 г.

Bitrix news.list - Вывод разделов и элементов

Нет нет да попадется задача где надо вывести содержимое инфоблоков отсортированный по разделам. Задача на первый взгляд обычная. Но, если не иметь под рукой шпаргалку вместо того чтобы потратить 5 мин тратишь 10. А это тебе надо? Разумеется нет.

Итак, добавляем компонент bitrix.news.list
Копируем в свой шаблон, создаем файл result_modifier.php

Добавляем такой код.
// получаем разделы
$dbResSect = CIBlockSection::GetList(
   Array("SORT"=>"ASC"),
   Array("IBLOCK_ID"=>$arParams['IBLOCK_ID'])
);
//Получаем разделы и собираем в массив
while($sectRes = $dbResSect->GetNext())
{
 $arSections[] = $sectRes;
}
//Собираем  массив из Разделов и элементов
foreach($arSections as $arSection){   
 foreach($arResult["ITEMS"] as $key=>$arItem){  
   if($arItem['IBLOCK_SECTION_ID'] == $arSection['ID']){
   $arSection['ELEMENTS'][] =  $arItem;
   }
 } 
 $arElementGroups[] = $arSection; 
}
$arResult["ITEMS"] = $arElementGroups;


Далее в шаблоне выводим.

    
$arItem):?>


Все.


3 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Оптимальнее будет так:

    $dbResSect = CIBlockSection::GetList(
    Array("SORT"=>"ASC"),
    Array("IBLOCK_ID"=>$arParams['IBLOCK_ID'])
    );
    //Получаем разделы и собираем в массив
    while($sectRes = $dbResSect->GetNext())
    {
    $arSections[$sectRes['ID']] = $sectRes;
    }

    foreach($arResult["ITEMS"] as $key=>$arItem) {
    $arSections[$arItem['IBLOCK_SECTION_ID']]['ITEMS'] = $arItem;
    }

    $arResult["SECTIONS"] = $arSections;

    Получаем один цикл, вместо двойного вложенного

    ОтветитьУдалить
  3. Тогда вот так вот. А то элементы друг друга перезаписывают

    $dbResSect = CIBlockSection::GetList(
    Array("SORT"=>"ASC"),
    Array("IBLOCK_ID"=>$arParams['IBLOCK_ID'])
    );
    //Получаем разделы и собираем в массив
    while($sectRes = $dbResSect->GetNext())
    {
    $arSections[$sectRes['ID']] = $sectRes;
    }

    foreach($arResult["ITEMS"] as $key=>$arItem) {
    $arSections[$arItem['IBLOCK_SECTION_ID']]['ITEMS'][] = $arItem;
    }

    $arResult["SECTIONS"] = $arSections;

    ОтветитьУдалить