Собираем программно меню

В битриксе можно создавать файлы с меню, где явно прописываются пункты и ссылки к ним, а также можно создавать меню из разделов инфоблока, для этого к компоненту menu подключается файл типа *.menu_ext.php, а в нем вызывается компонент menu.sections. Но что делать, если нужно реализовать сложную логику создания элементов меню?

По большому счету, программное создание меню сводится к созданию своего массива с пунктами меню и объединения его с глобальным массивом меню в файле типа .тип_меню.menu_ext.php.

Итак, создаем файл .тип_меню.menu_ext.php для нашего типа меню и в нем пишем нечто такое:

$aMenuLinksExt = Array(
Array(
        "Новая страница 1", 
        "/test_menu/novaya_stranitsa_1.php", 
        Array(), 
        Array(// любые другие параметры, Которые потом доступны в ключе ['PARAMS'] в шаблоне компонента меню), 
        "" 
    ),
    Array(
        "Новая страница 2", 
        "/test_menu/novaya_stranitsa_2.php", 
        Array(), 
        Array(// любые другие параметры, Которые потом доступны в ключе ['PARAMS'] в шаблоне компонента меню), 
        "" 
    )
);

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

Таким вот образом можно добавлять в меню разные дополнительные пункты

В качестве частного случая, можно привести добавление в меню разделов инфоблока:

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" => "/news/", //  - каталог инфоблока на сайте 
  "SECTION_PAGE_URL" => "#SECTION_ID#/", //  подставляем ID раздела 
  "DETAIL_PAGE_URL" => "#SECTION_ID#/#ELEMENT_ID#/", // - полный путь к элементу инфоблока 
  "IBLOCK_TYPE" => "news", // ID типа инфоблока 
  "IBLOCK_ID" => "1", //  ID инфоблока 
  "DEPTH_LEVEL" => "3", // уровень вложенности, этой цифрой можно выводить подразделы разделов если иерархия многоуровневая 
  "CACHE_TYPE" => "A", 
  "CACHE_TIME" => "36000000" 
  ), 
false 
); 
  $aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks); 

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

Количество показов: 3127
27.08.2018

Возврат к списку

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.