Иногда бывают случаи когда нужно вывести список из разделов и подразделов и их элементов инфоблока в виде дерева. Конкретно в моем случае, нужно было вывести 10 уровней подразделов с их элеметами вот так:
–> Раздел
–> Элементы данного раздела
—–> Подраздел 1
—–> Элементы данного подраздела
——–> Подраздел 2
——–> Элементы данного подраздела
итд.

Да есть компоненты типа tree view. Но они не особо удобны. Результатом гугления является следующий код. Он не особо оптимизирован, но работает. Его можно использовать, например в шаблоне компонента куда передается ID нужного раздела.

<?
//Указываете ID нужного инфоблока (для примера укажем 1)
$my_iblock_id = 1;

//Указываем ID нужного раздела (для примера укажем 2)
$my_section_id = 2;

//Объявляем массив дерева
$arTree = array();

$arFilter = array(		
  'ACTIVE' => 'Y',
  'IBLOCK_ID' => $my_iblock_id,
  'GLOBAL_ACTIVE'=>'Y',	    
);

//Делаем выборку разделов с сортировкой по возрастанию
$arSelect = array('IBLOCK_ID','ID','NAME','DEPTH_LEVEL','IBLOCK_SECTION_ID');
$arOrder = array('DEPTH_LEVEL'=>'ASC','SORT'=>'ASC','CREATED'=>'ASC');
$rsSections = CIBlockSection::GetList($arOrder, $arFilter, false, $arSelect);
$sectionLinc = array();
$arResult['ROOT'] = array();
$sectionLinc[0] = &$arResult['ROOT'];
while($arSection = $rsSections->GetNext()) {
  $sectionLinc[intval($arSection['IBLOCK_SECTION_ID'])]['CHILD'][$arSection['ID']] = $arSection;
  $sectionLinc[$arSection['ID']] = &$sectionLinc[intval($arSection['IBLOCK_SECTION_ID'])]['CHILD'][$arSection['ID']];
}

//$sectionLinc хранит все разделы и подразделы с их элементами (полное древо в общем)

//Если нужно взять лишь раздел с его подразделами и элементами то указываем его
$arTree = $sectionLinc[0]['CHILD'][$my_section_id]['CHILD'];
unset($sectionLinc);

//Рекурсивная функция для древовидного отображения разделов и их элементов
function recursiveForeach($arr,$iblock_id){
  global $APPLICATION;
  foreach ($arr as $key => $arVal){    
    //Название раздела
    echo $arVal['NAME'];

    //Далее стандартный компонент news.list,
    //в котором выводятся элементы конкретного раздела,
    //так как мы указываем PARENT_SECTION ниже
    $APPLICATION->IncludeComponent("bitrix:news.list", "",
      Array(
        "IBLOCK_TYPE" => "kontent",
        //$iblock_id - параметр ID инфоблока
        "IBLOCK_ID" => $iblock_id,
        "NEWS_COUNT" => "1000",
        "SORT_BY1" => "SORT",
        "SORT_ORDER1" => "ASC",
        "SORT_BY2" => "NAME",
        "SORT_ORDER2" => "ASC",
        "FILTER_NAME" => "",
        "FIELD_CODE" => array(),
        "PROPERTY_CODE" => array(),
        "CHECK_DATES" => "Y",
        "DETAIL_URL" => "",
        "AJAX_MODE" => "N",
        "AJAX_OPTION_SHADOW" => "Y",
        "AJAX_OPTION_JUMP" => "N",
        "AJAX_OPTION_STYLE" => "Y",
        "AJAX_OPTION_HISTORY" => "N",
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "36000000",
        "CACHE_FILTER" => "N",
        "CACHE_GROUPS" => "Y",
        "PREVIEW_TRUNCATE_LEN" => "",
        "ACTIVE_DATE_FORMAT" => "d.m.Y",
        "DISPLAY_PANEL" => "N",
        "SET_TITLE" => "N",
        "SET_STATUS_404" => "N",
        "INCLUDE_IBLOCK_INTO_CHAIN" => "N",
        "ADD_SECTIONS_CHAIN" => "N",
        "HIDE_LINK_WHEN_NO_DETAIL" => "N",
        //$arVal['ID'] - ID раздела или подраздела для отображения его элементов
        "PARENT_SECTION" => $arVal['ID'],
        "PARENT_SECTION_CODE" => "",
        "DISPLAY_TOP_PAGER" => "N",
        "DISPLAY_BOTTOM_PAGER" => "N",
        "PAGER_TITLE" => "Новости",
        "PAGER_SHOW_ALWAYS" => "N",
        "PAGER_TEMPLATE" => "",
        "PAGER_DESC_NUMBERING" => "N",
        "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000000",
        "PAGER_SHOW_ALL" => "N",
        "DISPLAY_DATE" => "Y",
        "DISPLAY_NAME" => "Y",
        "DISPLAY_PICTURE" => "Y",
        "DISPLAY_PREVIEW_TEXT" => "Y",
        "AJAX_OPTION_ADDITIONAL" => "",
        "COMPONENT_TEMPLATE" => "",
        "SET_BROWSER_TITLE" => "Y",
        "SET_META_KEYWORDS" => "Y",
        "SET_META_DESCRIPTION" => "Y",
        "SET_LAST_MODIFIED" => "N",
        "INCLUDE_SUBSECTIONS" => "N",
        "PAGER_BASE_LINK_ENABLE" => "N",
        "SHOW_404" => "N",
        "MESSAGE_404" => ""
      ),
      false
    );
    //Если у данного раздела есть подраздел то функция вызывается рекурсивно,
    //чтобы получилось дерево вида подраздел->элементы->подподраздел->элементы итд
    if ($arVal['CHILD']){
      recursiveForeach($arVal['CHILD'],$iblock_id);
    }
  }
}

recursiveForeach($arTree,$arParams["IBLOCK_ID"]);
unset($arTree);
?>

Поделись постом - это не сложно :)