Вывод разделов инфоблока в меню Битрикс

Бывает нужно вывести на странице меню, в котором будут содержаться разделы инфоблока. Ставим компонент меню (в визуальном редакторе «служебные -> навигация -> меню»), заходим в его настройки, выбираем тип меню, созданный заранее (в административной части «настройки -> настройки модулей -> управление структурой» на первой вкладке есть типы меню), ставим галочку «подключать файлы с именами вида .тип_меню.menu_ext.php». В корневой папке создаем файл .тип_меню.menu_ext.php со следующим содержимым:

<?
global $APPLICATION; 

// компонент сам формирует массив $aMenuLinksExt в нужном виде
$aMenuLinksExt = $APPLICATION->IncludeComponent(
  "bitrix:menu.sections",
  "",
  Array(
    "IS_SEF" => "Y", /* использовать ли ЧПУ */
    "SECTION_PAGE_URL" => "#SECTION_ID#/",
    "DETAIL_PAGE_URL" => "#SECTION_ID#/#ELEMENT_ID#/",
    "IBLOCK_TYPE" => "information", /* тип инфоблока */
    "IBLOCK_ID" => "3", /* ID инфоблока */
    "DEPTH_LEVEL" => "1", /* уровень вложенности разделов */
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "36000000"
  ),
  false
);

/* потом остается только объединить массивы */
/* файл .тип_меню.menu_ext.php должен возвращать массив $aMenuLinks для корректной работы компонента меню */
$aMenuLinks = array_merge(
  $aMenuLinks, /* массив с пунктами меню, который был изначально */
  $aMenuLinksExt /* наш созданный массив с разделами */
);
?>

При вызове компонента menu.sections в массиве настроек указывать

"SECTION_PAGE_URL" => "#SECTION_ID#/",
"DETAIL_PAGE_URL" => "#SECTION_ID#/#ELEMENT_ID#/",

не обязательно, если ссылки ЧПУ настроены в инфоблоке

параметр

IBLOCK_TYPE

также не является обязательным.

Статья оказалась полезной? Вырази благодарность - поделись в соцсетях

Отзывы : 13 комментариев

    • Попробуйте в файле menu_ext вывести просто пункты меню для проверки правильности его подключения

    • Очень внимательно с названием подключаемого файла:
      (точка) — тип меню — (точка) — menu_ext — (точка) — php
      Из-за этой точки перед названием файла ушло часа 4 времени

  1. Вывожу меню по продукции. Изначально в ТЗ необходимо вывести из Ж и М одежды только верхнюю одежду.
    Меню выводит, но подтягивает много лишнего. То размеры откуда-то возьмёт, то бренды.
    В лучшем случае получилось вывести всю продукцию. Можно ли как-то исключить лишнее из вывода?

  2. с лишними данными разобрался. Хотя и не понял как:)В массиве
    Array(
    «IBLOCK_TYPE» => «catalog», /* тип инфоблока */
    «IBLOCK_TYPE_ID» => «products», /* ID инфоблока */
    «DEPTH_LEVEL» => «2», /* уровень вложенности разделов */
    «CACHE_TYPE» => «Y»,
    «CACHE_TIME» => «36000000»
    ),
    нужно было указывать именно «IBLOCK_TYPE_ID» как было заданно по умолчанию.

  3. «При вызове компонента menu.sections в массиве настроек указывать»

    а где его вызывать?

  4. Создала файлик, но заработал как-то не сразу, странно, кеш чищу постоянно, создавала файл через админку, в куче вариаций. Думала, что в самом файле ошибка (может и была, но только вначале).
    Только когда создала его и залила по фтп меню заработало
    И то не совсем поняла принцип формирования ссылок.
    Почему выводит подкаталоги, как каталоги, т е:
    домен.ру/каталог/платье
    домен.ру/каталог/короткое
    домен.ру/каталог/длинное
    При том, что должно выводить:
    домен.ру/каталог/платье
    домен.ру/каталог/платье/короткое
    домен.ру/каталог/платье/длинное

    Подскажите, пожалуйста, в чем может быть дело?

    код компонента такой:
    $aMenuLinksExt = $APPLICATION->IncludeComponent(
    «bitrix:menu.sections»,
    «»,
    Array(
    «IS_SEF» => «Y», /* использовать ли ЧПУ */
    «SECTION_PAGE_URL» => «#IBLOCK_CODE#/#SECTION_CODE#/»,
    «DETAIL_PAGE_URL» => «#IBLOCK_CODE#/#SECTION_CODE#/#ELEMENT_CODE#/»,
    «IBLOCK_TYPE» => «catalog», /* тип инфоблока */
    «IBLOCK_ID» => «3», /* ID инфоблока */
    «DEPTH_LEVEL» => «4», /* уровень вложенности разделов */
    «CACHE_TYPE» => «A»,
    «CACHE_TIME» => «3600»
    ),
    false
    );

  5. Заработало! 🙂 затерялась первая точка в названии файла .тип_меню.menu_ext.php

Комментирование отключено