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

Меню из инфоблоков

00 голосов
7
Имеется каталог продукции на основе инфоблоков.
Нужно сделать древовидное меню навигации (наподобие стандартного типа меню tree) для каталога.
Каким образом это можно сделать?
спросил 02 Сен, 13 от Xolerick (120 баллов)

7 Ответы

00 голосов
Спишите из демо-примера ;)
Раздел /e-store/books/
Левое меню формируется там из разделов инфоблока. Если надо, то можно и многоуровневым его сделать....

Если устанавливали Битрикс без демо-данных, то попробуйте посмотреть в виртуальной лаборатории http://demo.bitrixsoft.ru
ответил 02 Сен, 13 от sickmind (4,660 баллов)
00 голосов
А мне надо менюшку в другом виде, как стандартный компонент tree.
Т.е. с раскрывающимися папочками, а в /e-store/books/ не так как нужно.
ответил 23 Ноя, 13 от Xolerick (120 баллов)
00 голосов
1. Выбирайте из инфоблока не 1 уровень разделов, а нужное количество уровней.
2. В настройках меню укажите, сколько уровней отображать.
3. Выберите тип меню "Вертикальное многоуровневое".
4. Настройте стили отображения в нужном Вам виде.

Или опять не то?
Тогда хоть пример покажите на картинке, какое меню хотите видеть....
ответил 04 Март, 14 от sickmind (4,660 баллов)
00 голосов
Вот такая структура каталога в админке получилась:

Рисунок

Меню хочется древовидное, вот такое:

Рисунок

Проблемы следующие:

1. Не получается сделать первый уровень древовидного меню из пунктов: АВТОМОБИЛЬНАЯ ТЕХНИКА, АУДИО И ВИДЕО ТЕХНИКА,ВСТРАИВАЕМАЯ БЫТОВАЯ ТЕХНИКА и т.д. а только из подразделов каждого из этих пунктов, т.е. например: Автоакустика, Автоинструмент, Автомагнитолы и т.д.
2. даже меню из подразделов при переходе по одному из пунктов дерева меню не запоминает позицию, дерево сворачивается и принимает первоначальный вариант.

как можно настроитьстили вертикального многоуровнего меню, чтобы оно приняло вид древовидного?
ответил 24 Июнь, 14 от Xolerick (120 баллов)
00 голосов
с меню удалось разобраться
ответил 23 Окт, 14 от Xolerick (120 баллов)
00 голосов
Раскажи подробней как удалоь разобраться?

И еще как ораганизовать импорт данных из CSV, чтоб тавар автоматически размещался в нужный подкаталог?
ответил 22 Фев, 15 от Kania (5,180 баллов)
00 голосов
Первый вопрос мы решили по другому - вывели список корневых категорий в отдельное меню.

Второй вопрос решили изменением шаблона меню:

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

<?if (!empty($arResult)):?>
<? $parentsMap = array(); ?>
<div class="menu-sitemap-tree">
<ul>
<?$previousLevel = 0;foreach($arResult as $arItem):?>
        <? $tmp = split('SECTION_ID=',$arItem["LINK"]); $thisID = $tmp[1]; ?>
        <? if ($previousLevel < $arItem["DEPTH_LEVEL"]) {
              $parentsMap[$thisID]=$previousID; 
           } elseif ($previousLevel == $arItem["DEPTH_LEVEL"]) {
              $parentsMap[$thisID]=$parentsMap[$previousID];    
           } else {
              $diff = $previousLevel - $arItem["DEPTH_LEVEL"]; $i=0;
              $prevParent = $parentsMap[$previousID];
              while ($i<$diff)
              {
                 $prevParent = $parentsMap[$prevParent];
                 $i++;
              }
              $parentsMap[$thisID] = $prevParent;
           }
        ?>
        <? if ($arItem["IS_PARENT"]) $parentID = $thisID;  ?>
        

   <?if ($previousLevel && $arItem["DEPTH_LEVEL"] < $previousLevel):?>
      <?=str_repeat("</ul></li>", ($previousLevel - $arItem["DEPTH_LEVEL"]));?>
   <?endif?>

   <?if ($arItem["IS_PARENT"]):?>
         <li class="close">
            <div class="folder" onClick="OpenMenuNode(this)" id="FLD<? echo $thisID; ?>"></div>
            <div class="item-text"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></div>
            <ul>

   <?else:?>

      <?if ($arItem["PERMISSION"] > "D"):?>
            <li>
               <div class="page"></div>
               <div class="item-text"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></div>
            </li>
      <?endif?>

   <?endif?>

   
        <? if ($GLOBALS["SECTION_ID"]==$thisID):?>
        <? $cPar = $thisID; $que = array(); ?>
        <? while ($parentsMap[$cPar]) 
          { 
              $cPar=$parentsMap[$cPar];
              $que[]=$cPar;
          }
          $que = array_reverse($que);
          foreach ($que as $elm)
          {  
             ?><script> OpenMenuNode(document.getElementById("FLD<? echo $elm; ?>")); </script><? 
              
          } ?>
        
        <?endif ?>
        
        <?$previousLevel = $arItem["DEPTH_LEVEL"];?>
        <?$previousID = $thisID;?>
        
<?endforeach?>

<?if ($previousLevel > 1)://close last item tags?>
   <?=str_repeat("</ul></li>", ($previousLevel-1) );?>
<?endif?>

</ul>
</div>
<?endif?>
ответил 01 Июнь, 15 от Xolerick (120 баллов)

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

0 голосов
1 ответ
спросил 24 Апр, 14 от Dominik (100 баллов)
0 голосов
3 ответов
0 голосов
3 ответов
спросил 24 Фев, 14 от salo (840 баллов)
0 голосов
3 ответов
0 голосов
5 ответов
спросил 04 Окт, 13 от Oke (160 баллов)