Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как определить родителя для пункта меню?

00 голосов
3
Взял стандартный шаблон меню vertical_multilevel
И переделал его под свои нужды.

Одного не могу добиться - вот к примеру выбран пункт второго уровня, он является активным. А как при выводе меню узнать, к какому родительскому пункту этот вложенный пункт относится?
Ведь предложенный в стандарте код определяет что родительсткий пункт является активным, только если он непосредственно выбран. А вот как узнать, выбран ли дочерний пункт внутри него?
спросил 20 Март, 14 от pop72 (240 баллов)

3 Ответы

00 голосов
Разрешить в настройках компонента несколько активных пунктов меню. Либо проход по массиву меню.
ответил 14 Сен, 14 от Pomnep (13,960 баллов)
00 голосов
Разрешил, ничего не изменилось.
По предложенной вами логике свойство selected должно отрабатывать в том числе и для родителя вложенного активного пункта. Однако нет.
Мож секрет какой есть?

С вашего позволения, вот код шаблона:
Код
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

<?if (!empty($arResult)):?>
    <ul id="vertical-multilevel-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="<?if ($arItem["SELECTED"]):?>root-item-selected expanded<?else:?>root-item<?endif?>">
                <a href="<?=$arItem["LINK"]?>" class="<?if ($arItem["SELECTED"]):?>root-item-selected<?else:?>root-item<?endif?>"><?=$arItem["TEXT"]?></a>
                <ul class="root-item">
                <?else:?>
                <li><a href="<?=$arItem["LINK"]?>" class="parent<?if ($arItem["SELECTED"]):?> item-selected<?endif?>"><?=$arItem["TEXT"]?></a>
            <ul>
                <?endif?>

                <?else:?>

                <?if ($arItem["PERMISSION"] > "D"):?>

                    <?if ($arItem["DEPTH_LEVEL"] == 1):?>
                        <li><a href="<?=$arItem["LINK"]?>" class="<?if ($arItem["SELECTED"]):?>root-item-selected<?else:?>root-item<?endif?>"><?=$arItem["TEXT"]?></a></li>
                        <?else:?>
                        <li><a href="<?=$arItem["LINK"]?>" <?if ($arItem["SELECTED"]):?> class="item-selected"<?endif?>><?=$arItem["TEXT"]?></a></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>
    <?endif?>


Массив - да, на последок оставлю, если ничего не поможет.
ответил 19 Янв, 15 от pop72 (240 баллов)
00 голосов
Тут только идти по массиву вверх, пока DEPTH_LEVEL не уменьшится на 1. Как только уменьшился -вот он родитель.
ответил 04 Май, 15 от Cyber (540 баллов)

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

0 голосов
4 ответов
спросил 12 Фев, 13 от Toropunka (260 баллов)
0 голосов
7 ответов
спросил 24 Авг, 13 от DeAtH (120 баллов)
0 голосов
1 ответ
спросил 14 Авг, 13 от sanokruss (160 баллов)
0 голосов
6 ответов