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

Древовидное меню, выбранные пункты меню.

00 голосов
5
Здравствуйте умные люди.

Хочу понять вот что.
Есть древовидное меню с тремя уровнями вложенности:

1 уровень
1 уровень(родитель)
--2 уровень
--2 уровень(родитель)
------3 уровень
------3 уровень
--2 уровень
--2 уровень
1 уровень
1 уровень

Необходимо чтобы после перезагрузки страницы родительские уровни все были открыты, т.е. чтобы у них не было класса close после загрузки страницы.
Соорудил проверку пунктов на "выбранность" с помощью условия <?if ($arItem["PERMISSION"] > "D"):?> <?if ($arItem["SELECTED"]):?> (опечатался, извините):
Код
<div class="menu-sitemap-tree">
<ul>
<?$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["SELECTED"]):?>
         <li class="selected-parent-item">
            <div class="folder" onclick="OpenMenuNode(this)"></div>
            <div class="item-text"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></div>
            <ul>
         <?else:?>
         <li class="close">
            <div class="folder" onclick="OpenMenuNode(this)"></div>
            <div class="item-text"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></div>
            <ul>
      <?endif?>
   <?else:?>

      <?if ($arItem["PERMISSION"] > "D"):?>
         <?if ($arItem["SELECTED"]):?>
            <li class="selected-item">
               <div class="page"></div>
               <div class="item-text"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></div>
            </li>
         <?else:?>
            <li>
               <div class="page"></div>
               <div class="item-text"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></div>
            </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>
Но при переходе, к примеру на пункт третьего уровня "3 уровень" к пунктам-родителям первого и второго уровней "1 уровень(родитель), 2 уровень(родитель)" нужные классы не применяются, хотя при переходе на эти пункты условия прорабатываются и нужный класс к ним прибавляется.

Подскажите пожалуйста, это нужно реализовывать в шаблоне, или нужна настройка структуры?
Меню формируется из торгового каталога с разделами и подразделами имеющими три уровня вложенности.
Спасибо за Ваши ответы.
спросил 25 Ноя, 13 от Traxexx (900 баллов)

5 Ответы

00 голосов
Условие
Цитата
Евгений Бескровный пишет:
<?if ($arItem["PERMISSION"] > "D"):?>

проверяет, имеет ли пользователь право доступа к разделу или странице, на которые ссылается пункт меню. Вашу проблему не решает ни разу.
Каким компонентом формируете меню? bitrix:menu.sections? Используете ли ЧПУ?
ответил 18 Янв, 14 от Pomnep (13,960 баллов)
00 голосов
Фу ты, описался, извините))) конечно же я знаю что проверяет <?if ($arItem["PERMISSION"] > "D"):?> :)

Да, Евгений, меню формируется bitrix:menu.sections чпу не используется.
ответил 05 Май, 14 от Traxexx (900 баллов)
00 голосов
Цитата
Евгений Бескровный пишет:
Да, Евгений, меню формируется bitrix:menu.sections чпу не используется.

Понятно. Ну, тогда так, пожалуй. В result_modifier.php bitrix:menu (НЕ bitrix.menu.sections!) проходите по массиву менюхи для поиска пункта с SELECTED == true, потом от него к вершине и отмечаете все найденные тоже как SELECTED. Естественно, в настройках bitrix:menu должен быть выставлен пункт "Разрешать несколько активных пунктов меню".
ответил 31 Авг, 14 от Pomnep (13,960 баллов)
00 голосов
Спасибо, Евгений.
ответил 06 Янв, 15 от Traxexx (900 баллов)
00 голосов
А можно пример кода работающего?
ответил 24 Апр, 15 от McFrestai (100 баллов)

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

0 голосов
1 ответ
0 голосов
3 ответов
0 голосов
3 ответов
спросил 14 Март, 14 от Jagami (100 баллов)
0 голосов
0 ответов
0 голосов
1 ответ
спросил 09 Март, 14 от Nuts2010 (100 баллов)