@by_steris

Как передать список разделов в Битрикс?

Пытаюсь собрать массив с разделами инфоблока, чтобы можно было в следующем использовать первый, второй и третий уровень в шаблоне, но по какой-то причине, в массив второго уровня попадают не все разделы и вообще привязываются неправильно. В чем ошибка, кто-то может подсказать ?

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();

$newSection = [];
$sectionLvlOne = 0;
$sectionLvlTwo = 0;
$sectionLvlThree = 0;

$arFilter = array('IBLOCK_ID' => 1, 'ACTIVE' => 'Y');
$arSelect = array('IBLOCK_ID', 'ID', 'NAME', 'SECTION_PAGE_URL', 'DETAIL_PICTURE', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID');
$rsSect = CIBlockSection::GetList(
    array("LEFT_MARGIN" => "ASC"), //сортировка
    $arFilter, //фильтр (выше объявили)
    false, //выводить количество элементов - нет
    $arSelect //выборка вывода, нам нужно только название, описание, картинка
);
while ($arSect = $rsSect->GetNext()) {
    //echo '<pre>'; print_r($arSect); '</pre>';

    if ($arSect['DEPTH_LEVEL'] == 1) {
        $newSection[$arSect['ID']] = $arSect;
        $sectionLvlOne = $arSect['ID'];
    }
    if ($arSect['DEPTH_LEVEL'] == 2) {
        $newSection[$sectionLvlOne]['SECOND_LVL'][$arSect['ID']] = $arSect;
        $sectionLvlTwo = $arSect['ID'];
    }
    if ($arSect['DEPTH_LEVEL'] == 3) {
        $newSection[$sectionLvlOne]['SECOND_LVL'][$sectionLvlTwo]['THIRD_LVL'][$arSect['ID']] = $arSect;
        $sectionLvlThree = $arSect['ID'];
    }
    $arResult['NEW_SECTIONS'] = $newSection;
}

echo '<pre>'; print_r($arResult['NEW_SECTIONS']); '</pre>';
?>
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 1
@koder_1
Битрикс программист
Ошибка в том, что нужно делать 3 разных цикла, в первом цикле нужно собрать сначала все разделы 1 уровня, затем во втором цикле все разделы 2 уровня, и в третьем цикле разделы 3 уровня, и хорошо бы добавить
в массив
array("DEPTH_LEVEL" => "ASC", "LEFT_MARGIN" => "ASC")


Дело в том, что вы используете
$newSection[$sectionLvlOne]['SECOND_LVL'][$arSect['ID']] = $arSect;
в момент, когда $newSection[$sectionLvlOne] еще может не быть задан, потому что раздел 1 уровня в цикле может быть получен позднее, чем раздел второго уровня.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы