Добро пожаловать на сайт Bitrix Q&A, где вы можете задавать вопросы о программировании и разработке на Битрикс и получать быстрые и квалифицированные ответы от профессионалов!


catalog.section как сделать вывод разделов и элементов

0 голосов
Нужно вывести элементы отсортированые по разделам на одной странице.

Напромер: Раздел 1{Элемент1, Элемент2, Элемент3}, потом на этой же странице ниже Раздел 2{Элемент1, элемент2, элемент3} и.т.д.

Через result_modifer смог получить название раздела для каждого элемента:

foreach ($arResult['ITEMS'] as $key => $arItem)
{
   $arSectionList = array();
   $rsSections = CIBlockElement::GetElementGroups($arItem['ID']);
   while ($arSection = $rsSections->Fetch())
   {
      $arSectionList[] = array(
         'ID' => $arSection['ID'],
         'NAME' => $arSection['NAME'],
      );
   }
   $arItem['SECTION_NAME'] = $arSectionList;
   $arResult['ITEMS'][$key] = $arItem;
}

Теперь хочу собрать массив вида Раздел 1{Элемент1, Элемент2, Элемент3}. Подскажите решение.
спросил 03 Фев, 15 от аноним

1 Ответ

0 голосов
Боюсь что ваш подход в корне неверен.

1. Вы собираете названия разделов для каждого элемента, а нужно каждый элемент поместить в соответствующий раздел.

2. Вы делаете запрос к БД (GetElementGroups) в цикле - это приведёт к низкой производительности.

3. У вас элемент может быть только в одном разделе? Если да (а в 90% это так), то не нужен запрос GetElementGroups, достаточно обратиться к переменной IBLOCK_SECTION_ID в arItem

4. Собрав ID разделов, вы можете получить их названия одним запросом - примерно так (не проверял)
$dbSections = CIBlockSection::GetList(array('NAME'=>'ASC'), array('IBLOCK_ID'=>XX, 'ID'=>$arSectionIDS));

5. Соберите разделы (ID, NAME) в массив $arResult['SECTIONS']. А потом пройдитесь в цикле по этим разделам и добавьте соответствующие им элементы из arResult['ITEMS'].

Надеюсь, чем-то помог =)
ответил 03 Фев, 15 от root (20,920 баллов)

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

Управление продуктом: аналитика, разработка, продвижение