По большому счету, программное создание меню сводится к созданию своего массива с пунктами меню и объединения его с глобальным массивом меню в файле типа .тип_меню.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 отработал, нужно в компоненте меню включить его подключение .
