Задать вопрос
@goozer

Как вывести разделы каталога в верхнее меню битрикс?

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

Вот тут: dev.alexkash.ru/ru

Или хотя бы объяснить куда копать
  • Вопрос задан
  • 2955 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@ZZiliST
Изучаю JS, CSS, HTML, PHP
Ну смотри я вот так реализовываю всегда.

1) Создаю два типа меню. Например: "Верхнее меню" и "Каталог" ( что бы создать новые типы меню, это надо пройти в настройки и там в настроках структуры дописать новые типы меню.
2) Беру обычный компонент типа bitrix:menu вот его template.php

<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); ?>
<?$countMenu = 0;?>
<? if(!empty($arResult)): ?>
    <div class="top_menu">
		<ul class="menu" data-role="x-menu">
			<?
				$previousLevel = 0;
				foreach($arResult as $arItem):
			?>
				<? if($previousLevel && $arItem["DEPTH_LEVEL"] < $previousLevel):?>
					<?=str_repeat("</ul></li>", ($previousLevel - $arItem["DEPTH_LEVEL"]));?>
				<? endif; ?>
				<? if($arItem["IS_PARENT"]): ?>
					<? if($arItem["DEPTH_LEVEL"] == 1): ?>
						<li class="first_lvl_parent parent_li<? if($arItem["SELECTED"]): ?> first_lvl_selected<? endif; ?>" <?if($countMenu == 0):?>onmouseout="OutoverElement();"
   onmouseover="HoverElement();"<?endif?>><span class="parent_span"><a href="<?=$arItem["LINK"]?>" class="<? if($arItem["SELECTED"]): ?>root-item-selected<? else: ?>root-item<? endif; ?>"<?if($countMenu == 0):?>style="padding-left:0;"<?endif?> ><?if($countMenu == 0):?>
									
									<?$countMenu = 1;?>
								<?endif;?><div class="catmenu"><?=$arItem["TEXT"]?></div></a></span>
							<ul class="first_lvl" style="height:470px">
					<? else: ?>
						<li class="parent_li<? if($arItem["SELECTED"]): ?> item-selected<? endif; ?>">
							<span class="parent_span">
								<a href="<?=$arItem["LINK"]?>" class="parent">
									<?=$arItem["TEXT"]?>
								</a>
								<i class="l_top"></i><i class="l_bt"></i>
							</span>
							<ul class="parent_lvl" >
								<li class="zap_top"></li>
								<li class="zap_bt"></li>
					<? endif; ?>
				<? else: ?>
					<? if($arItem["PERMISSION"] > "D"): ?>
						<? if($arItem["DEPTH_LEVEL"] == 1): ?>
							<li class="not_parent<? if($arItem["SELECTED"]): ?> first_lvl_selected<? endif; ?>"><span><a href="<?=$arItem["LINK"]?>" class="<? if($arItem["SELECTED"]): ?>root-item-selected<? else: ?>root-item<? endif; ?>"><?=$arItem["TEXT"]?></a></span></li>
						<? else: ?>
							<li<? if($arItem["SELECTED"]): ?> class="item-selected"<? endif; ?>><span><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></span></li>
						<? endif; ?>
					<? endif; ?>
				<? endif; ?>
				<? $previousLevel = $arItem["DEPTH_LEVEL"]; ?>
			<? endforeach; ?>
			<? if($previousLevel > 1): ?>
				<?=str_repeat("</ul></li>", ($previousLevel-1) );?>
			<? endif; ?>
		</ul>
	</div>
<? endif; ?>


3) Ставлю в настройках компонента "Тип меню для первого уровня: Верхнее меню" - где у меня всего один пункт "Каталог товаров" со ссылкой на основную страницу каталога.
4) Ставлю в настройках компонента "Тип меню для остальных уровней: Каталог" (уровень вложенности по желанию.
5) Далее перехожу в корневую папку каталога. У меня это адрес_сайта/catalog/ и добавляю в ней новое меню типа "Каталог". Сохраняем его.
6) Открываю это меню для редактирования в режиме php и вставляю вместо всего что там есть, следующий код:

<? 
  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" => "/katalog/",
		"SECTION_PAGE_URL" => "#SECTION_CODE_PATH#/",
		"DETAIL_PAGE_URL" => "#SECTION_CODE_PATH#/#ELEMENT_CODE#.html",
		"IBLOCK_TYPE" => "catalog", 
		"IBLOCK_ID" => "18",
		"DEPTH_LEVEL" => "2",
		"CACHE_TYPE" => "A",
		"CACHE_TIME" => "36000000"
	),
	false
); 
  $aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks); 
?>


Должно работать.

Важно! В 6 пункте, обязательно укажите правильные
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "18",

они у вас имеют свои значения, какие именно? Смотрите у себя в админке.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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