Как вывести элементы раздела инфоблока в выпадающее меню на Битрикс

При разработке сайта на 1С-Битрикс часто возникает задача, когда в главное меню, формируемое из файла .top.menu.php, нужно добавить выпадающий список. Этот список должен содержать элементы (например, товары или статьи) из определённого раздела инфоблока.

Представленный код имеет верную логику, но содержит несколько критичных ошибок, из-за которых результат не выводится. Давайте разберем правильное решение по шагам.

Корректный код для файла .top.menu.php

Ниже приведен исправленный и рабочий вариант кода. Основные правки касаются инициализации массива и проверки прав доступа.

<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

global $APPLICATION;
$aMenuLinksExt = []; // Важно: инициализируем массив

if(CModule::IncludeModule("iblock"))
{
    $IBLOCK_ID = 3; // Укажите актуальный ID вашего инфоблока
    $SECTION_ID = 5; // Укажите ID нужного раздела

    $arOrder = ["SORT" => "ASC"];
    $arSelect = ["ID", "NAME", "IBLOCK_ID", "DETAIL_PAGE_URL"];
    $arFilter = [
        "IBLOCK_ID" => $IBLOCK_ID,
        "ACTIVE" => "Y",
        "SECTION_ID" => $SECTION_ID,
        "INCLUDE_SUBSECTIONS" => "N" // Если не нужно включать подразделы
    ];

    $res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);

    while($ob = $res->GetNextElement())
    {
        $arFields = $ob->GetFields();
        $aMenuLinksExt[] = [
            $arFields['NAME'],
            $arFields['DETAIL_PAGE_URL'],
            [],
            [],
            ""
        ];
    }
}
// Объединяем с основным меню
$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);
?>

Ключевые моменты для успешной реализации

  • Инициализация массива: Перед циклом обязательно создайте пустой массив $aMenuLinksExt = []. В исходном коде это было пропущено, что могло вызывать ошибку.
  • Проверка ID: Убедитесь, что константы $IBLOCK_ID и $SECTION_ID содержат корректные числовые значения, соответствующие вашей структуре в административной панели Битрикс.
  • Структура данных для меню: Массив $aMenuLinksExt[] заполняется в формате, ожидаемом компонентом меню: [Название, Ссылка, Дополнительный массив, Массив параметров, Иконка].
  • Кеширование: Для повышения производительности на «боевом» сайте стоит добавить кеширование результатов выборки из инфоблока.

После внесения этих правок элементы выбранного раздела инфоблока появятся в начале вашего главного меню в виде выпадающего списка.