Блог Горошко Андрея 1C-Битрикс Динамическое меню в Битрикс: Файлы .menu_ext.php

Динамическое меню в Битрикс: Файлы .menu_ext.php

Стандартное меню в Битрикс (.top.menu.php) статично — это просто массив ссылок.

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

Для этого используется механизм расширения меню через файлы .<тип_меню>.menu_ext.php.

Как это работает?

При построении меню Битрикс ищет в текущем разделе файл с суффиксом _ext.php.

Например, для верхнего меню (.top.menu.php) он будет искать .top.menu_ext.php.

Если файл найден, он выполняется.

Внутри этого файла вы должны сформировать массив $aMenuLinksExt и объединить его с основным меню.

Задача: Добавить разделы инфоблока «Каталог» в левое меню

Создадим файл .left.menu_ext.php в корне сайта (или в разделе каталога).

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

global $APPLICATION;

// Используем стандартный компонент для генерации меню из инфоблока
// Он уже умеет строить иерархию, учитывать права и кэшировать результат
$aMenuLinksExt = $APPLICATION->IncludeComponent(
    "bitrix:menu.sections", 
    "", 
    array(
        "IS_SEF" => "Y",
        "SEF_BASE_URL" => "/catalog/", // Путь к каталогу
        "SECTION_PAGE_URL" => "#SECTION_CODE#/",
        "DETAIL_PAGE_URL" => "#SECTION_CODE#/#ELEMENT_CODE#",
        "IBLOCK_TYPE" => "catalog",
        "IBLOCK_ID" => "5", // ID инфоблока
        "DEPTH_LEVEL" => "2", // Глубина вложенности
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "3600"
    ),
    false
);

// Объединяем стандартное меню с нашим динамическим
$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);
?>

Важные моменты:

  1. $aMenuLinks: Это глобальная переменная, в которой хранится текущее меню. Мы должны слить её с новым массивом.
  2. Порядок слияния: array_merge($aMenuLinksExt, $aMenuLinks) поставит разделы каталога перед статическими пунктами. Если поменять аргументы местами, каталог будет в конце.
  3. Компонент menu.sections: Не обязательно писать свои запросы CIBlockSection::GetList. Стандартный компонент делает это лучше, сразу возвращая массив в нужном формате для меню.

Свой алгоритм генерации

Если нужно добавить что-то нестандартное, формируйте массив вручную:

$aMenuLinksExt = [];
$aMenuLinksExt[] = [
    "Моя динамическая ссылка",   // Название
    "/my-link/",                 // Ссылка
    [],                          // Доп. ссылки для подсветки
    ["FROM_IBLOCK" => true],     // Параметры (PARAMS)
    ""                           // Условие PHP (обычно пусто)
];

$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);

Вывод:
Файлы .menu_ext.php — это единственный правильный способ сделать меню динамическим. Используйте компонент bitrix:menu.sections для инфоблоков или пишите свою логику, не забывая про кэширование внутри генерации.

меню битрикс, .menu_ext.php, динамическое меню, CMenu, GetList, разделы инфоблока в меню, навигация.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Настройка Композитного режима сайта (Битрикс Composite) под ключ с гарантиейНастройка Композитного режима сайта (Битрикс Composite) под ключ с гарантией

Высокая скорость загрузки сайта и безупречная серверная безопасность — обязательные требования для успешного коммерческого проекта на 1С-Битрикс. Услуга «Настройка Композитного режима сайта (Битрикс Composite) под ключ с гарантией» обеспечивает мгновенное

Получить настройки платежной системы для конкретного счета sale.paysystem.set…Получить настройки платежной системы для конкретного счета sale.paysystem.set…

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Получить настройки платежной системы для конкретного счета sale.paysystem.set…»,

Как использовать метод SDK sale.property.getFieldsByType в Битрикс24Как использовать метод SDK sale.property.getFieldsByType в Битрикс24

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Как использовать метод SDK sale.property.getFieldsByType в Битрикс24». Вы узнаете экспертные методики работы с