Разбираемся с шаблоном меню horizontal_multilevel
Массив $arResult состоит из вложенных массивов, соответсвующих пунктам меню. Вложенные массивы содержат ключи:
TEXT
текст текущего пункта менюLINK
ссылка текущего пункта менюSELECTED
выбран ли пункт меню в данный моментPERMISSION
доступ на страницу указанную в $LINK, возможны следующие значения:
D
доступ запрещён
R
чтение (право просмотра содержимого файла)
U
документооборот (право на редактирование файла в режиме документооборота)
W
запись (право на прямое редактирование)
X
полный доступ (право на прямое редактирование файла и право на изменение прав доступа на данных файл)ADDITIONAL_LINKS
дополнительные ссылки для подсветки менюITEM_TYPE
D
- директория (еслиLINK
заканчивается на/
), иначеP
- страницаITEM_INDEX
порядковый номер пункта менюPARAMS
параметры пунктов менюDEPTH_LEVEL
уровень вложенности пункта меню (1 для главного, 2 и далее для вложенных)IS_PARENT
флаг того, что у этого пункта меню будет подменю
Вывод производится вложенными списками вида:
<ul id="horizontal-multilevel-menu">
<li><a>Пункт первого уровня вложенности</a></li>
<li><a>Пункт первого уровня вложенности</a>
<ul>
<li><a>Пункт второго уровня вложенности</a></li>
<li><a>Пункт второго уровня вложенности</a></li>
</ul>
</li>
<li><a>Пункт первого уровня вложенности</a></li>
</ul>
<?// если есть хотя бы 1 пункт меню, можно начинать вывод?>
<?if (!empty($arResult)):?>
<ul id="horizontal-multilevel-menu">
<?
// переменная содержит значение DEPTH_LEVEL предыдущего пункта
$previousLevel = 0;
// пробегаем по пунктам, $arItem - массив с информацией о текущем пункте
foreach($arResult as $arItem):
?>
<?if ($previousLevel && $arItem["DEPTH_LEVEL"] < $previousLevel):?>
<?// если уровень вложенности текущего пункта меню меньше чем у предыдущего, значит "подменю" закончилось и нужно закрыть список?>
<?=str_repeat("</ul></li>", ($previousLevel - $arItem["DEPTH_LEVEL"]));?>
<?endif?>
<?
//если пункт содержит подменю, выводим ссылку и начинаем новый список (тег <ul>)
if ($arItem["IS_PARENT"]):
?>
<?
// если уровень вложенности =1, т.е. это главное меню
if ($arItem["DEPTH_LEVEL"] == 1):
?>
<?// выводим ссылку и добавляем класс "root-item" если пункт неактивный и "root-item-selected" если активный?>
<li>
<a href="<?=$arItem[" LINK"]?>" class="<?if ($arItem["SELECTED"]):?>root-item-selected<?else:?>root-item<?endif?>"><?=$arItem["TEXT"]?></a>
<ul>
<?
// для остальных уровней вложенности
else:
?>
<?// выводим ссылку и добавляем класс "parent". Если пункт активный, для элемента списка <li> добавляем класс "item-selected"?>
<li<?if ($arItem["SELECTED"]):?> class="item-selected"<?endif?>><a href="<?=$arItem[" LINK"]?>" class="parent"><?=$arItem["TEXT"]?></a>
<ul>
<?endif?>
<?
// для пунктов, не содержащих подменю
else:
?>
<?
// проверяем право доступа к пункту
if ($arItem["PERMISSION"] > "D"):
?>
<?
// если уровень вложенности =1, т.е. это главное меню
if ($arItem["DEPTH_LEVEL"] == 1):
?>
<?// выводим ссылку и добавляем класс "root-item" если пункт неактивный и "root-item-selected" если активный?>
<li><a href="<?=$arItem[" LINK"]?>" class="<?if ($arItem["SELECTED"]):?>root-item-selected<?else:?>root-item<?endif?>"><?=$arItem["TEXT"]?></a></li>
<?
// для остальных уровней вложенности
else:
?>
<?// выводим ссылку. Если пункт активный, для элемента списка <li> добавляем класс "item-selected"?>
<li<?if ($arItem["SELECTED"]):?> class="item-selected"<?endif?>><a href="<?=$arItem[" LINK"]?>"><?=$arItem["TEXT"]?></a></li>
<?endif?>
<?
// для пунктов, к которым запрещен доступ
else:
?>
<?
// если уровень вложенности =1, т.е. это главное меню
if ($arItem["DEPTH_LEVEL"] == 1):
?>
<?// выводим пустую ссылку и добавляем класс "root-item" если пункт неактивный и "root-item-selected" если активный?>
<li><a href="" class="<?if ($arItem[" SELECTED"]):?>root-item-selected<?else:?>root-item<?endif?>" title="<?=GetMessage("MENU_ITEM_ACCESS_DENIED")?>"><?=$arItem["TEXT"]?></a></li>
<?
// для остальных уровней вложенности
else:
?>
<?// выводим пустую ссылку и добавляем класс "denied"?>
<li><a href="" class="denied" title="<?=GetMessage(" MENU_ITEM_ACCESS_DENIED")?>"><?=$arItem["TEXT"]?></a></li>
<?endif?>
<?endif?>
<?endif?>
<?
// запоминаем уровень вложенности
$previousLevel = $arItem["DEPTH_LEVEL"];
?>
<?endforeach?>
<?
// если работа завершилась на пункте меню с уровнем вложенности >1, закрываем вложенные списки
if ($previousLevel > 1):
?>
<?=str_repeat("</ul></li>", ($previousLevel-1) );?>
<?endif?>
</ul>
<?endif?>