WebDev2030
@WebDev2030
Битриксоид до мозга и костей

Как построить многоуровневое меню из одного файла?

Привет, битриксоидам.
Сейчас битрикс генерит меню пробегая по папкам. Например: Если в главном меню есть ссылка на каталог /catalog/ то битрикс пойдёт в папку catalog и подцепит от туда второй уровень. У меня же в меню сейчас стоит ссылка на раздел инфоблока: /catalog/kukhni/ и поэтому битрикс не может построит вложенное меню, т.к. физического файла меню для раздела /catalog/kukhni/ нет.
Вот я и думаю может как-то можно построить меню из одного файла, чтобы не пробегать по вложенным файлам с меню вообще. Я пробовал прописывать в файл вот это:
Array(
	"Каталог",
	"/catalog/kukhni/",
	Array(),
	Array(
		"DEPTH_LEVEL"=>"1"
	),
	"" 
),
Array(
	"Каталог",
	"/catalog/kukhni/iz-dereva/",
	Array(),
	Array(
		"DEPTH_LEVEL"=>"2"
	),
	""
),

Но не помогло.
  • Вопрос задан
  • 1674 просмотра
Пригласить эксперта
Ответы на вопрос 2
AlexeyGfi
@AlexeyGfi
YouTube >>> Битриксоид из Колхоза
https://dev.1c-bitrix.ru/learning/course/?COURSE_I...
Система Bitrix Framework позволяет также создавать меню динамического типа. Т.е. массив данных таких меню генерируется автоматически на основании некоторых данных, получаемых с помощью программного кода. Данный код должен храниться в папке соответствующего раздела сайта в файле с именем .<тип меню>.menu_ext.php.


Кладёте в *.menu_ext.php что угодно — хоть компонент с выборкой подразделов... Суть в том, что на вход пришёл $aMenuLinks, должен $aMenuLinks и уйти. То есть в этом файле дополняете массив новыми пунктами/подпунктами и пропускаете дальше.
Ответ написан
WebDev2030
@WebDev2030 Автор вопроса
Битриксоид до мозга и костей
В общем сделал как-то криво но в принципе работает. В параметры к пунктам я проставил параметры: DEPTH_LEVEL и IS_PARENT. Потом в компоненте меню в result_modifier.php
foreach($arResult as $i => &$arMenu){
	if($arMenu["PARAMS"]["DEPTH_LEVEL"] <> ''){
		$arMenu['DEPTH_LEVEL'] = $arMenu["PARAMS"]["DEPTH_LEVEL"];
	}
	if($arMenu["PARAMS"]["PARENT"] <> ''){
		$arMenu['IS_PARENT'] = $arMenu["PARAMS"]["PARENT"];
	}
}

Ну а уже после всего в main.menu_ext.php добавил
Array(
	"Кухни",
	"/catalog/kukhni/",
	Array(),
	Array(
		"PARENT"=>"Y",
		"DEPTH_LEVEL"=>"1"
	),
	""
)

И после написал получения нужных разделов инфоблока проставил им DEPTH_LEVEL=2 и IS_PARENT ="Y" и подстановку в меню.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы