Чтобы вывести инфоблок и его подкаталоги в виде древовидного списка с возможностью скачивания файлов в Битрикс, вам потребуется использовать некоторые функции API 1C-Bitrix.
Шаг 1: Получение данных об инфоблоках и подкаталогах
Для начала вам нужно получить данные об инфоблоке и его подкаталогах. Для этого можно воспользоваться функцией CIBlock::GetList(). Пример кода:
$arResult = array(); $iblock_type = 'catalog'; // тут укажите свой тип инфоблока $iblock_id = 1; // тут укажите ID своего инфоблока $arFilter = array( 'TYPE' => $iblock_type, 'ID' => $iblock_id ); $dbIblock = CIBlock::GetList(array(), $arFilter); if ($arIblock = $dbIblock->Fetch()) { $arResult['IBLOCK'] = $arIblock; // Получаем подкаталоги инфоблока $arFilter = array( 'TYPE' => $iblock_type, 'IBLOCK_ID' => $iblock_id, 'DEPTH_LEVEL' => 2 // указываем глубину вложенности подкаталогов ); $dbSections = CIBlockSection::GetList(array('LEFT_MARGIN' => 'ASC'), $arFilter, true, array('ID', 'NAME', 'IBLOCK_SECTION_ID')); while ($arSection = $dbSections->Fetch()) { $arResult['SECTIONS'][$arSection['ID']] = $arSection; } }
Шаг 2: Вывод списка инфоблока и подкаталогов в виде дерева
Следующим шагом нужно вывести полученные данные в виде древовидного списка. Для этого можно воспользоваться рекурсивной функцией, которая будет обходить подкаталоги и выводить их. Пример кода:
function showSections($sections, $depth = 1) { foreach ($sections as $section) { echo str_repeat(' ', $depth) . $section['NAME'] . '<br>'; // Если в разделе есть файлы, выводим их $arFilter = array( 'IBLOCK_ID' => $section['IBLOCK_ID'], 'SECTION_ID' => $section['ID'], 'ACTIVE' => 'Y' ); $dbElements = CIBlockElement::GetList(array(), $arFilter, false, array('ID', 'NAME', 'PROPERTY_FILE')); while ($arElement = $dbElements->Fetch()) { $file_arr = CFile::GetFileArray($arElement['PROPERTY_FILE_VALUE']); $file_url = $file_arr['SRC']; echo str_repeat(' ', $depth + 1) . '<a href="' . $file_url . '" target="_blank" rel="noopener">' . $arElement['NAME'] . '</a><br>'; } // Если в разделе есть дочерние подразделы, вызываем функцию рекурсивно if (isset($section['CHILDREN'])) { showSections($section['CHILDREN'], $depth + 1); } } } // Вызываем функцию вывода списка showSections($arResult['SECTIONS']);
В итоге, при выполнении данного кода вы получите древовидный список инфоблока и его подкаталогов с возможностью скачивания файлов. Помимо этого, можно вносить изменения в код для дополнительной обработки и форматирования данных.