@tectolog

Как в битриксе вывести трех-четырехуровневое меню?

Привет всем. Нужна помощь в следующей ситуации:
1. В магазине на Битриксе есть боковое меню, которое сейчас выводит два уровня меню:
$APPLICATION->IncludeComponent("bitrix:menu", "left", array(
						"ROOT_MENU_TYPE" => "left",
						"MENU_CACHE_TYPE" => "Y",
						"MENU_CACHE_TIME" => "36000000",
						"MENU_CACHE_USE_GROUPS" => "Y",
						"MENU_CACHE_GET_VARS" => array(
						),
						"MAX_LEVEL" => "2",
						"CHILD_MENU_TYPE" => "left",
						"USE_EXT" => "Y",
						"DELAY" => "N",
						"ALLOW_MULTI_SELECT" => "N"
						),
						false
					);


и соответственно, сам шаблон вывода меню:
...
foreach($arResult as $arItem):
?>
	<?if ($previousLevel && $arItem["DEPTH_LEVEL"] < $previousLevel && $arItem['DEPTH_LEVEL'] > 1):?>
		<?=str_repeat("</ul></li>", ($previousLevel - $arItem["DEPTH_LEVEL"]));?>
	<?elseif ($previousLevel && $arItem["DEPTH_LEVEL"] < $previousLevel):?>
				</ul>
			</div><!-- menu -->
			<div class="bottom"></div><!-- bottom -->
		</div><!-- block -->
	<?endif?>

	<? if ($arItem['DEPTH_LEVEL'] == 1):?>
		<div class="block">
			<p class="name"><?=$arItem["TEXT"]?></p>
			<div class="menu">
				<ul>
	<?elseif ( $arItem["IS_PARENT"] && $arItem['DEPTH_LEVEL'] == 2 ):?>
			<li<?if($arItem["SELECTED"] == true):?>  class="active"<?endif?>>
				<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>
				<ul>
	<?else:?>
				<li<?if($arItem["SELECTED"] == true):?>  class="active"<?endif?>>
					<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>
				</li>

	<?endif?>
	
	<?$previousLevel = $arItem["DEPTH_LEVEL"];?>

<?endforeach?>
...


Теперь стоит задача вывести бОльшую вложенность меню, подкатегории 2-го, 3-го и 4-го уровней и товары в подкатегории 4-ого уровня созданы и выводятся в секциях на странице магазина, т.е. битрикс видит все подкатегории и их товары и все это показывает. С меню возникают проблемы. Естественно, изменил в компоненте меню "MAX_LEVEL" => "2", на "MAX_LEVEL" => "4",

Начинаю смотреть массив элементов меню через print_r( $arResult ) и не вижу в нем подкатегорий 4-го уровня, всё до 3-его уровня - есть, а 4-го - нет. В чем может быть проблема?

Спасибо.
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 3
@topuserman
Для этого можно использовать компонент catalog.section.list

Не понимаю почему меню статическое, если туда еще и товары выводите, почему не разделы инфоблока ?
Ответ написан
alexyarik
@alexyarik
Битрикс разработчик
Как-то сам помню столкнулся с проблемой 4-х уровней вложенности. Берёте шаблон компонента catalog_vertical там можно доработать в result_modifier.php и будет вывод четырёх уровней вложенности.
Ответ написан
@tectolog Автор вопроса
Нашел один мануал - по нему получилось выстроить меню в 4 уровня ( мануал здесь ), но возникла следующая проблема:
в массиве у каждого элемента есть параметр SELECTED и он всегда почему-то пустой. Кто сталкивался, подскажите, где чего надо подправить, чтобы SELECTED все-таки фиксировался у соответствующего элемента массива.

И попутный еще один вопрос, он, может, связан как раз с SELECTED: в параметрах LINK и ADDITIONAL_LINKS[0] находится урл категории магазина, можно ли повлиять где-то в настройках компонента насам урл, например, значение '/catalog/cabinet_furniture/kitchens/' привести к виду '/catalog/kitchens/'? В магазине у категорий вот такой вид '/catalog/kitchens/' и сайт проиндексирован поисковиками, т.е. необходимо что-то делать со значениями, которые выдает компонент меню. Спасибо.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы