serg78ant
@serg78ant

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

Собственно вся суть вопроса изложена в заголовке вопроса.
Пробовал использовать section.list, но он дает только разделы без подразделов.
Хотелось бы обойтись без доп. запросов через getlist.
  • Вопрос задан
  • 5252 просмотра
Решения вопроса 1
Можно указать нужную глубину выборки в компоненте.

Или же писать свой компонент
https://dev.1c-bitrix.ru/api_help/iblock/classes/c...
В примерах есть выборка подразделов
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
gromdron
@gromdron
Работаю с Bitrix24
Перечитал и вообще не понял вопроса. Есть же стандартный CIblockSection::GetList() который за 1 запрос прекрасно все достает и со вложенностью.

В спойлере указал код, который получить все разделы включая подразделы для конкретного инфоблока, отсортированные по левому отступу (т.е. сверху вниз, слева на право). И все это за 1 запрос к БД средствами API.

Пример который проверял
/**
 * Всегда считаем что модуль установлен, 
 * поэтому просто подключаем его
 */
\Bitrix\Main\Loader::IncludeModule('iblock');

/**
 * У меня для тестирования инфоблок с номером 5,
 * у тебя может быть любой другой инфобло
 * 
 * @var array Параметры фильтрации
 */
$arFilter = [
	'IBLOCK_ID' => 5
];

/**
 * В Битриксе разделы хранятся по принципу Nested sets
 * 
 * @var array Параметры сортировки
 */
$arOrder = [
	'LEFT_MARGIN' => 'ASC'
];

/**
 * @var array Поля разделов
 */
$arSelect = [
	'ID',
	'LEFT_MARGIN',
	'DEPTH_LEVEL',
	'NAME'
];

$resSections = \CIBlockSection::GetList($arOrder, $arFilter, false, $arSelect);

while( $arSection = $resSections->fetch() )
{
	var_dump($arSection);
}


В чем я ошибся и где я делаю не так?
Ответ написан
Ваш ответ на вопрос

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

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