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

Выпадающее меню из инфоблоков

00 голосов
3
Здравствуйте!
Вроде где-то видел на форуме, но сейчас не могу найти.
Как сделать выпадающее меню, которое будет состоять из инфоблоков одного типа???
Это например актуально в каталоге.
Чтобы юзвери добавляли новый раздел и он автоматически добавлялся в выпадающее меню.
спросил 24 Фев, 14 от salo (840 баллов)

3 Ответы

00 голосов
Добрый день

Вот в этой статье документации:
http://www.bitrixsoft.ru/help/index.html?page=source%2Fmain%2Fhelp%2Fru%2Fdeveloper%2Freference%2Fcmain%2Fgetmenuhtml.php.html
обратите внимание на пример файла .left.menu_ext.php, он формирует массив пунктов меню для отображения его в шаблоне меню.
ответил 29 Июль, 14 от Damani (1,180 баллов)
00 голосов
А у меня почему-то не получается :(
В левое меню добавляются разделы, а выпадающее меню остается пустым...
.left.menu.php
Код
<?
$aMenuLinks = Array(
);
?>


.left.menu_ext.php
Код
<?
if (CModule::IncludeModule("iblock")):

   $IBLOCK_TYPE = "article";   // тип инфо-блока
   $IBLOCK_ID = 60;         // ID инфо-блока
   $CACHE_TIME = $GLOBALS["CACHE_TIME"];   // время кэширования

   $aMenuLinksNew = array();

   $CACHE_ID = __FILE__.$IBLOCK_ID;
   $obMenuCache = new CPHPCache;
   // если массив закэширован то
   if($obMenuCache->InitCache($CACHE_TIME, $CACHE_ID, "/"))
   {
      // берем данные из кэша
      $arVars = $obMenuCache->GetVars();
      $aMenuLinksNew = $arVars["aMenuLinksNew"];
   }
   else
   {
      // иначе собираем разделы
      $rsSections = GetIBlockSectionList($IBLOCK_ID, false, array("SORT" => "ASC", "ID" => "ASC"), false, array("ACTIVE"=>"Y"));
      while ($arSection = $rsSections->Fetch())
      {
         $arrAddLinks = array(SITE_DIR."articles/element.php?SECTION_ID=".$arSection["ID"]);
         // пройдемся по элементам раздела
         if ($rsElements = GetIBlockElementListEx($IBLOCK_TYPE,
false, false, array(), false, array("ACTIVE" => "Y", "IBLOCK_ID" => $IBLOCK_ID,
 "SECTION_ID" => $arSection["ID"]), array("ID", "IBLOCK_ID", "DETAIL_PAGE_URL")))
         {
            while ($arElement = $rsElements->GetNext()) $arrAddLinks[] = $arElement["DETAIL_PAGE_URL"];
         }
         $aMenuLinksNew[] = array($arSection["NAME"], SITE_DIR."articles/section.php?SECTION_ID=".$arSection["ID"], $arrAddLinks);
      }
   }
   // сохраняем данные в кэше
   if($obMenuCache->StartDataCache())
   {
      $obMenuCache->EndDataCache(Array("aMenuLinksNew_2" => $aMenuLinksNew_2));
   }
   $aMenuLinks = array_merge($aMenuLinks, $aMenuLinksNew);
endif;
?>
ответил 30 Ноя, 14 от Miyamoto (200 баллов)
00 голосов
Сам спросил, сам ответил :)
В шаблоне верхнего меню нужно инициализировать объект класса CMenu с параметром use_ext=true.

$popup_menu->Init($LINK, true);
ответил 25 Март, 15 от Miyamoto (200 баллов)

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

0 голосов
1 ответ
0 голосов
3 ответов
0 голосов
1 ответ
спросил 24 Апр, 14 от Dominik (100 баллов)
0 голосов
3 ответов
0 голосов
3 ответов