Битрикс. Горизонтальное меню

Переделанный шаблон горизонтального меню с выпадающими пунктами.

Верстка правится отдельно, этот код — пример.

<?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>

Вроде все понятно.

Количество просмотров: 130


Понравилась статья?

Возврат к списку