Вывод разделов и элементов для .left.menu_ext.php

Внимание! Раздел находится в стадии разработки. Комментарии временно недоступны
Страницы: 1
RSS
Вывод разделов и элементов для .left.menu_ext.php
Вывод разделов и элементов для .left.menu_ext.php

В 1С-Битрикс для вывода структуры инфоблока, включая разделы и элементы, в файле .left.menu_ext.php  можно воспользоваться следующей логикой. В данном случае мы  предполагаем, что необходимо получить названия и ссылки как для  разделов, так и для элементов инфоблока с определённым ID.
Изменено: Валерий Макеев - 29.08.2025 12:05:44
Этот код создает иерархическое меню разделов и элементов инфоблока с сохранением структуры вложенности для использования в компонентах меню Битрикс.
Код
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();

$IBLOCK_ID = 5;

if (!CModule::IncludeModule('iblock')) {
    return;
}

$aMenuLinks = [];

// Получение разделов
$allSections = [];
$rsSections = CIBlockSection::GetList(
    ['LEFT_MARGIN' => 'ASC'],
    ['IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y'],
    false,
    ['ID', 'NAME', 'SECTION_PAGE_URL', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID']
);
while ($section = $rsSections->GetNext()) {
    $section['CHILDREN'] = [];
    $section['ELEMENTS'] = [];
    $allSections[$section['ID']] = $section;
}

// Построение дерева
$sectionTree = [];
foreach ($allSections as $id => $section) {
    $parentId = $section['IBLOCK_SECTION_ID'];
    if ($parentId > 0 && isset($allSections[$parentId])) {
        $allSections[$parentId]['CHILDREN'][$id] = &$allSections[$id];
    } else {
        $sectionTree[$id] = &$allSections[$id];
    }
}

// Получение элементов
$rsElements = CIBlockElement::GetList(
    ['SORT' => 'ASC'],
    ['IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y'],
    false,
    false,
    ['ID', 'NAME', 'DETAIL_PAGE_URL', 'IBLOCK_SECTION_ID']
);
while ($element = $rsElements->GetNext()) {
    $sectionId = $element['IBLOCK_SECTION_ID'];
    if (isset($allSections[$sectionId])) {
        $allSections[$sectionId]['ELEMENTS'][] = [
            'NAME' => $element['NAME'],
            'URL'  => $element['DETAIL_PAGE_URL']
        ];
    }
}

// Построение меню (с вложенными подпунктами)
function buildMenuTree($tree) {
    $menu = [];
    foreach ($tree as $section) {
        $subMenu = [];

        // Элементы раздела
        foreach ($section['ELEMENTS'] as $element) {
            $subMenu[] = [
                $element['NAME'],
                $element['URL'],
                [],
                ['DEPTH_LEVEL' => $section['DEPTH_LEVEL'] + 1],
                ''
            ];
        }

        // Подразделы
        if (!empty($section['CHILDREN'])) {
            $subMenu = array_merge($subMenu, buildMenuTree($section['CHILDREN']));
        }

        $menu[] = [
            $section['NAME'],
            $section['SECTION_PAGE_URL'],
            $subMenu,
            ['DEPTH_LEVEL' => $section['DEPTH_LEVEL']],
            ''
        ];
    }
    return $menu;
}

$aMenuLinks = buildMenuTree($sectionTree);
?>


Возможное улучшение: кеширование (если критична производительность)
Код
$obCache = new CPHPCache();
$cacheTime = 3600; // 1 час
$cacheDir = '/menu_cache/iblock_' . $IBLOCK_ID;

if ($obCache->InitCache($cacheTime, '', $cacheDir)) {
    $aMenuLinks = $obCache->GetVars();
} else {
    if ($obCache->StartDataCache()) {
        // ... весь код построения меню (от получения разделов до buildMenuTree)
        $aMenuLinks = buildMenuTree($sectionTree);
        $obCache->EndDataCache($aMenuLinks);
    } else {
        // fallback, если кеш не удалось создать
        $aMenuLinks = [];
    }
}
Страницы: 1

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Участие в проекте

привлечение в проект на part-time основе

от 30 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack

* на основе готовой верстки

Перенос сайтов на «1С-Битрикс»

сайты на платформе «1С-Битрикс» — это удобство, надежность и высокая посещаемость

от 12 000 рублей
Перенос сайтов с любых CMS и статичных страниц на платформу «1С-Битрикс», с учетом дизайна, верстки и урл-адресов. С сохранением всей информации и структуры сайта.

* зависит от объема выполняемых работ.