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

Косяк с левым меню

00 голосов
7
Помогите, пожалуйста: у меня нормально работает меню 3-го уровня вложенности. Я изменяю уровень на четвёртый - всё отображается нормально, но при добавлении раздела 4-го уровня меню косячится и вообще наполовину скрывается из вида.
спросил 23 Авг, 13 от Odinokii (160 баллов)

7 Ответы

00 голосов
Настройки компонента? Шаблон кастомизировали?
ответил 23 Авг, 13 от Pomnep (13,960 баллов)
00 голосов
Хм, вот где я не копалась - так это в шаблоне.

Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>



<script>

$(document).ready(function() {
   $(".group").click(function() {
      if($(this).attr("subgroup")=="true") {
         if($(this).attr("openFlag")=="true") { $(this).next(".subgroupSection").animate({height:'0px'},500); $(this).attr("openFlag","false"); }
         else { $(this).next(".subgroupSection").animate({height:$(this).next().find(".heightMetric").height()+7+'px'},500); $(this).attr("openFlag","true"); }
         return false;
         }
      });
   });
                                        

</script>

<? 



$ar_result=CIBlockSection::GetList(Array("SORT"=>"­­ASC"), Array("ID"=>"1"),false, Array("UF_SHOW_IN_MENU "));
if($res=$ar_result->GetNext()){echo $res["UF_SHOW_IN_MENU"];} 

  // выборка только активных разделов из инфоблока $IBLOCK_ID, в которых есть элементы 
  // со значением свойства SRC, начинающееся с https://
  $arFilter = Array('ID'=>1);
  $db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, false, array('UF_*',));
  while($ar_result = $db_list->GetNext())
  {
//    print_r($ar_result); echo "<br>";
  }

$LAST_DEPTH=0;
foreach($arResult["SECTIONS"] as $arSection):
//print_r($arSection);

  $arFilter = Array('SECTION_ID'=>$arSection["ID"], 'GLOBAL_ACTIVE'=>'Y');
  $db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true);
  if($db_list->SelectedRowsCount()==0) $groupIsLink=true;
   else $groupIsLink=false;

   switch($arSection["DEPTH_LEVEL"]) {
      case 1: {
         if($LAST_DEPTH==3) echo '</div></div>';
         if($LAST_DEPTH!=0) echo '</div><div class="left_menu_bottom"></div>';
         echo '<div class="left_menu_top"></div><div class="left_menu_middle"><div class="title">'.$arSection["NAME"].'</div>';
         break;
      }
      case 2: {
         if($LAST_DEPTH==3) echo '</div></div>';
         if($groupIsLink) echo '<div class="group"><a href="'.$arSection["SECTION_PAGE_URL"].'">'.$arSection["NAME"].'</a></div>';
         else echo '<div class="group" subgroup="true">'.$arSection["NAME"].'</div>';
         break;
      }
      case 3: {
         if($LAST_DEPTH==2) echo '<div class="subgroupSection" style="overflow:hidden; height:0px;"><div class="heightMetric">';
         echo '<div class="subgroup"><a href="'.$arSection["SECTION_PAGE_URL"].'">'.$arSection["NAME"].'</a></div>';
         break;
      }
   }
   
   
   $LAST_DEPTH=$arSection["DEPTH_LEVEL"];


//   if($arSection["DEPTH_LEVEL"]==1&&$CURRENT_DEPTH==0)
//      echo "<ul>";
?>
<?endforeach?>         
</div><div class="left_menu_bottom"></div>
               


Вот шаблон меню. Подскажите, что где прописать для добавления 4 уровня?
Я просто ещё не очень хорошо разбираюсь в этом.
ответил 04 Ноя, 13 от Odinokii (160 баллов)
00 голосов
Ну, допишите обработчик для
Код
switch($arSection["DEPTH_LEVEL"]) 

что-то типа:
Код
case 4:
// тут вывод 4-го уровня
break;
ответил 10 Фев, 14 от Pomnep (13,960 баллов)
00 голосов
спасибо) попробую.
ответил 31 Май, 14 от Odinokii (160 баллов)
00 голосов
А если по уму - весь Ваш шаблон выкинуть надо.
ответил 28 Сен, 14 от Pomnep (13,960 баллов)
00 голосов
Честно говоря, шаблон писала не я.
В чём там ошибки?
ответил 31 Янв, 15 от Odinokii (160 баллов)
00 голосов
1. Нарушена структура шаблона - ява-скрипт должен лежать в отдельном файле рядом с template.php. В template.php надо оставить только привязку к $(document).ready(), и то не факт.
2. Запросы к БД надо писать в result_modifier.php - опять-таки нарушение идеологии.
Первые два пункта, в общем, некритичны, зато однозначно характеризуют писавшего.
3. За каким чертом ДВАЖДЫ вызывается информация о разделе (секции) инфоблока с ID = 1, я вообще не понял. Не говоря уж о том, что если у Вас инфоблок сменится, этот код вообще становится бесполезен. Тем более, что информация о секциях и так уже есть в $arResult['SECTIONS'].
4. Дальше у Вас идет перебор $arResult['SECTIONS']. Делать запросы к базе, чтоб выяснить, нет ли у секции подсекций - смешно. У Вас есть поле DEPTH_LEVEL. Тупо сравниваем его со следующим - если он больше или равне следующему - нет подсекций.
5. Сами обработчики уровней вложенности (из-за чего Вы тему и создали) при добавлении еще одного уровня надо дописывать ВСЕ. По уму все делается без разбивки на уровни (как у Вас сейчас). Т.е. без страшных конструкций типа switch... case...

Резюме. Код на уровне студента 1-го курса, который еще ничего не знает. После такого я или отправляю человека работать над собой этак с полгодика, или вообще говорю "до свидания, Вы нам не походите".
ответил 14 Май, 15 от Pomnep (13,960 баллов)

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

0 голосов
1 ответ
спросил 04 Ноя, 13 от SaNCHeZzz (120 баллов)
0 голосов
1 ответ
0 голосов
0 ответов
спросил 22 Июнь, 13 от Yrys (220 баллов)
0 голосов
1 ответ
спросил 28 Июль, 15 от аноним