Переделанный шаблон горизонтального меню с выпадающими пунктами.
Верстка правится отдельно, этот код — пример.
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<nav class="navbar">
<?if (!empty($arResult)): // если есть хотя бы 1 пункт меню, можно начинать вывод?>
<ul class="menu">
<?
$previousLevel = 0; // переменная содержит значение DEPTH_LEVEL предыдущего пункта
foreach($arResult as $arItem): // пробегаем по пунктам, $arItem - массив с информацией о текущем пункте?>
<?if ($previousLevel && $arItem["DEPTH_LEVEL"] < $previousLevel):?>
<?// если уровень вложенности текущего пункта меню меньше чем у предыдущего, значит "подменю" закончилось и нужно закрыть список?>
<?=str_repeat("</ul></li>", ($previousLevel - $arItem["DEPTH_LEVEL"]));?>
<?endif?>
<?if ($arItem["IS_PARENT"]): //если пункт содержит подменю, выводим ссылку и начинаем новый список (тег <ul>)?>
<?if ($arItem["DEPTH_LEVEL"] == 1): // если уровень вложенности =1, т.е. это главное меню?>
<?// вывожу ссылку и добавляю класс "какой-нибудь класс", если пункт неактивный и "какой-нибудь класс", если активный?>
<li class="menu-item menu-item-has-children">
<a href="<?=$arItem["LINK"]?>" data-toggle="sub-menu"><?=$arItem["TEXT"]?><i class="expand"></i></a>
<ul class="sub-menu">
<?else: // для остальных уровней вложенности?>
<?// вывожу ссылку и добавляю класс "какой-нибудь класс". Если пункт активный, для элемента списка <li> добавляю класс "какой-нибудь класс"?>
<li class="menu-item"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>
<ul>
<?endif?>
<?else: // для пунктов, не содержащих подменю?>
<?if ($arItem["PERMISSION"] > "D"): // проверяю право доступа к пункту?>
<?if ($arItem["DEPTH_LEVEL"] == 1): // если уровень вложенности =1, т.е. это главное меню?>
<?// вывожу ссылку и если нужно добавляю класс, если пункт неактивный и другой класс, если активный?>
<li class="menu-item"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li>
<?else: // для остальных уровней вложенности?>
<?// вывожу ссылку, если пункт активный, для элемента списка <li> добавляю класс "какой-нибудь класс"?>
<li class="menu-item"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li>
<?endif?>
<?endif?>
<?endif?>
<?$previousLevel = $arItem["DEPTH_LEVEL"]; // запоминаю уровень вложенности?>
<?endforeach?>
<?if ($previousLevel > 1):// если закрыл вложенность >1, закрываю вложенные списки?>
<?=str_repeat("</ul></li>", ($previousLevel-1) );?>
<?endif?>
</ul>
<?endif?>
</nav>
Вроде все понятно.
Количество просмотров: 228