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

Шаблон меню

00 голосов
4
Господа! Добрый день! И вопрос! :))))
Есть меню. Многоуровневое.
Его шаблон таков:
Код
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<div id="menuover">
<?if (!empty($arResult)):?>
<ul id="menu">
<?
$previousLevel = 0;
foreach($arResult as $key => $arItem):?>
   <?if ($previousLevel && $arItem["DEPTH_LEVEL"] < $previousLevel):?>
      <?=str_repeat("</ul></li><hr class='head'>", ($previousLevel - $arItem["DEPTH_LEVEL"]));?>
   <?endif?>
   <?if ($arItem["IS_PARENT"]):?>
      <?if ($arItem["DEPTH_LEVEL"] == 1):?>
         <li class="parent"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>
            <ul>
      <?else:?>
         <li class="parent"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a><div class="head"></div>
            <ul>
      <?endif?>
   <?else:?>
      <?if ($arItem["PERMISSION"] > "D"):?>
         <?if ($arItem["DEPTH_LEVEL"] == 1):?>

            <li class="parent"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li><?if (sizeof($arResult) <> ($key+1)) echo '<hr class="head">';?> 
         <?else:?>
            <li class="child"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li>
         <?endif?>
      <?else:?>
         <?if ($arItem["DEPTH_LEVEL"] == 1):?>
            <li><a href="" title="<?=GetMessage("MENU_ITEM_ACCESS_DENIED")?>"><?=$arItem["TEXT"]?></a></li><hr class="head">
         <?else:?>
            <li><a href="" 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><hr class='head'>", ($previousLevel-1) );?>
<?endif?>
</ul>
<?endif?></div>

Код jQuery для него же, таков:
Код
function initMenu() {

  $('#menu ul').hide();

  $('#menu li a').click(
    function() {
      var checkElement = $(this).next();
      if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
 $('#menu ul:visible').hide(500);
        return false;
        }
      if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
        $('#menu ul:visible').slideUp(500);
        checkElement.show(500);
        return false;
        }
      }
    );
  }
$(document).ready(function() {initMenu();});

Изначально оно в свернутом виде. При переходе на подпункт, он сворачивает меню. А мне надо, чтобы пункт, который сейчас активен, открывался. )))) Если что-то не так сказал или не понятно, сообщите!!!! Очень нуждаюсь в решении этого вопроса!
Заранее, благодарен!!! ;)
спросил 13 Окт, 13 от Serofim (800 баллов)

4 Ответы

00 голосов
Народ! ))) Не спим!!! Стремимся к лучшему!! Помогите, кто, чем может?! 8)
ответил 02 Ноя, 13 от Serofim (800 баллов)
00 голосов
Для похожей задачи делал так:
1. определял что нахожусь внутри нужного раздела
Код
if(strpos($APPLICATION->GetCurDir(),$arItem["LINK"])!==false)
   $class = ' act';

2. дописывал элементу класс
Код
<li class="child<?=$class?>"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li>

3. на $(document).ready вешал обработчик, который делал список-родитель элемента с классом act видимым
ответил 07 Фев, 14 от Ahbar (820 баллов)
00 голосов
Вспомнил, что у стандартного компонента меню в массиве-результате уже есть информация о "активности" пункта, и п.1 из сообщения выше можно удалить
ответил 28 Май, 14 от Ahbar (820 баллов)
00 голосов
Алексей Валеев Приогромнейшее спасибо, Вам!!! Все как Вы сказали! ;))) Дали зацепку, а я клубочек дораскручивал. Ещё раз, огромнейшее спасибо!!!

Код
Тема закрыта...
ответил 24 Сен, 14 от Serofim (800 баллов)

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

0 голосов
1 ответ
спросил 23 Июнь, 14 от Keh192 (300 баллов)
0 голосов
4 ответов
0 голосов
1 ответ
спросил 18 Июль, 13 от Kania (5,180 баллов)
0 голосов
6 ответов
спросил 01 Июль, 13 от Harror (160 баллов)
0 голосов
1 ответ