Если рассматривать стандартное многоуровневое меню (шаблон vertical_multilevel), то по-моему можно как-то так:
Код |
---|
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?if (!empty($arResult)):?>
<div class="left-menu">
<ul id="vertical-multilevel-menu">
<?
$previousLevel = 0;
foreach($arResult as $num=>$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><table cellspacing="0" cellpadding="0"><tr><td style="vertical-align:middle;"><div class="menu_item">
<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></div></td></tr></table>
<ul class="root-item">
<?else:?>
<li><table cellspacing="0" cellpadding="0"><tr><td style="vertical-align:middle;"><div class="menu_item">
<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></div></td></tr></table>
<ul>
<?endif?>
<?else:?>
<?if ($arItem["PERMISSION"] > "D"):?>
<?if ($arItem["DEPTH_LEVEL"] == 1):?>
<li><table cellspacing="0" cellpadding="0"><tr><td style="vertical-align:middle;"><div class="menu_item" valign="middle">
<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></div></td></tr></table></li>
<?else:?>
<li <?if (!($arResult[$num+1])||($arResult[$num+1]["DEPTH_LEVEL"]<$arItem["DEPTH_LEVEL"])) echo 'class="last_li"';?>><table cellspacing="0" cellpadding="0"><tr><td style="vertical-align:middle;"><div class="menu_item" valign="middle">
<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></div></td></tr></table></li>
<?endif?>
<?else:?>
<?if ($arItem["DEPTH_LEVEL"] == 1):?>
<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:?>
<li><a href="" class="denied" title="<?=GetMessage("MENU_ITEM_ACCESS_DENIED")?>"><?=$arItem["TEXT"]?></a></li>
<?endif?>
<?endif?>
<?endif?>
<?$previousLevel = $arItem["DEPTH_LEVEL"];?>
<?endforeach?>
<?if ($previousLevel > 1)://close last item tags?>
<?=str_repeat("</ul></li>", ($previousLevel-1) );?>
<?endif?>
</ul></div>
<?endif?> |
Тут добавлена проверка <? if (!($arResult[$num+1])||($arResult[$num+1]["DEPTH_LEVEL"]<$arItem["DEPTH_LEVEL"])) echo 'class="last_li"';?> и foreach($arResult as $num=>$arItem):?> вместо foreach($arResult as $arItem):?>, т.е. элемент последний, если дальше нет пунктов или если глубина вложенности следующего пункта меньше текущего.
Но не будет работать, если в этот последний пункт вложено еще одно подменю, в этом случае нужно еще добавить еще одну проверку в случае <?if ($arItem["IS_PARENT"]):?> ... и $arItem["DEPTH_LEVEL"] != 1.