Задать вопрос

Как получить корневой раздел элемента инфоблока Битрикс?

Сейчас строится весь путь: Основной раздел > Подраздел > и т. д.
foreach($sectionIDs as $id)
	{
		$nav = CIBlockSection::GetNavChain(false, $id, array("ID", "NAME"));
		while($arSectionPath = $nav->GetNext()){
			if($arSectionPath["ID"] == $id) continue;
			$arResult["SECTIONS"]["S".$id]["PATH"] .= $arSectionPath["NAME"].' > ';
		} 
	}


Нужно как-то получить ['DEPTH_LEVEL'] == 1 из пути по дереву CIBlockSection::GetNavChain
  • Вопрос задан
  • 344 просмотра
Подписаться 1 Средний 2 комментария
Решения вопроса 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
Можно вот так.
$select = [
    "IBLOCK_ID",
    "SECTION_ID" => "ID",
    "SECTION_NAME" => "NAME",
    "PARENT_ID" => "ROOT_SECTION.ID",
    "PARENT_NAME" => "ROOT_SECTION.NAME",
];

$iblockId = 12;
$sections = [437, 494, 482];//массив из ID разделов для которых нужно получить корневые разделы

/** @var class-string<SectionTable> $entity */
$entity = \Bitrix\Iblock\Model\Section::compileEntityByIblock($iblockId);

$dbNavChain = $entity::getList([
    "select" => $select,
    "filter" => [
        "=IBLOCK_ID" => $iblockId,
        "ID" => $sections, 
        "=ROOT_SECTION.DEPTH_LEVEL" => 1
    ],
    'runtime' => [
        'ROOT_SECTION' => [
            'data_type' => $entity,
            'reference' => [
                '=ref.IBLOCK_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $iblockId),
                '>this.LEFT_MARGIN' => 'ref.LEFT_MARGIN',
                '<this.RIGHT_MARGIN' => 'ref.RIGHT_MARGIN',
            ]
        ]
    ],
    "order" => [
        "ROOT_SECTION.LEFT_MARGIN" => "ASC"
    ],
    "cache" => [
        "ttl" => 86400
    ]
]);

$result = [];
while ($navChain = $dbNavChain->fetch()) {
    $section = [
        "ID" => $navChain["PARENT_ID"],
        "IBLOCK_ID" => $navChain["IBLOCK_ID"],
        "NAME" => $navChain["PARENT_NAME"],
    ];

    $result[$navChain["SECTION_ID"]] = $section;
}

print_r($result);

Результат:
Array
(
    [437] => Array
        (
            [ID] => 75
            [IBLOCK_ID] => 12
            [NAME] => Гель-лаки
        )

    [482] => Array
        (
            [ID] => 338
            [IBLOCK_ID] => 12
            [NAME] => Инструменты
        )

    [494] => Array
        (
            [ID] => 338
            [IBLOCK_ID] => 12
            [NAME] => Инструменты
        )

)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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