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

Древовидное меню.

00 голосов
7
Нужно создать на сайте левое меню в виде дерева, с раскрывающимися пунктами вплоть до третьего уровня. Причем во вложенных пунктах ссылками могут являться не только "листы" дерева, но и узловые элементы.
До этого делала только линейные простейшие меню. Поняла, что желательно делать меню, которое будет строиться на основании разделов и статей инфоблока.
Прочитала http://dev.1c-bitrix.ru/api_help/main/general/menu.php и http://dev.1c-bitrix.ru/api_help/main/general/menu_5x.php, посмотрела подходящие темы на форуме. Понимаю, что разбираться буду дооооолго, если вообще разберусь без посторонней помощи. Пожалуйста, расскажите последовательно что конкретно нужно делать или ткните куда-то, где это уже обсуждалось, документация как-то уж очень лаконична в этом вопросе...
P.S. Честное слово, я не блондинка, вразумительные объяснения понимаю. Просто я совсем новичок в этом вопросе.
спросил 13 Авг, 13 от SK8 (120 баллов)

7 Ответы

00 голосов
Если вам нужно меню из разделов и элементов инфоблока, то такое меню надо программировать в файле под названием .left.menu_ext.php. В этом файле формируете в цикле для каждого раздела и элемента массив такого вида
Код
$aMenuLinksExt[] = array(
   $ar_fields["NAME"], // Название
   "/index/32/", //здесь ссылка или заглушка пустое поле ""
   Array(),
   Array( // здесь параметры
      "FROM_IBLOCK" => 1,
      "IS_PARENT" => 0,
      "LINK_STUB" => 0, // этот параметр я ставлю чтобы показать в шаблоне заглушка это или ссылка.
      "DEPTH_LEVEL" => $ar_fields["DEPTH_LEVEL"],
      "SELECTED" => $select
   ),
);

После формирования полностью массива пунктов в конце файла ставите
Код
$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);

И далее в параметрах левого меню ставите галочку подключать файлы с окончанием _ext.
На основании этого массива выводите шаблон. По моему в битриксе даже готовый есть. Что то типа tree называется. Не помню точно.

Где то это вроде в документации описывается. наберите в поиске menu_ext
ответил 13 Авг, 13 от MuLaLLlka (200 баллов)
00 голосов
Цитата
Оксана Щербакова пишет:
Прочитала http://dev.1c-bitrix.ru/api_help/main/general/menu.php и http://dev.1c-bitrix.ru/api_help/main...enu_5x.php, посмотрела подходящие темы на форуме.


А сюда не заглядывали?
ответил 18 Окт, 13 от Merigold (460 баллов)
00 голосов
Роберт Басыров, нет, сюда еще не заглядывала. Спасибо за ссылку, пошла читать.

Артур Неудахин, я попыталась сделать нечто подобное, у меня подгрузился только один самый верхний уровень, правда, я в "DEPTH_LEVEL" просто поставила 3, это, конечно, фигня, т.к. элементы-то должны быть каждый на своем уровне :)...
ответил 20 Янв, 14 от SK8 (120 баллов)
00 голосов
Цитата
Оксана Щербакова пишет:
Артур Неудахин , я попыталась сделать нечто подобное, у меня подгрузился только один самый верхний уровень, правда, я в "DEPTH_LEVEL" просто поставила 3, это, конечно, фигня, т.к. элементы-то должны быть каждый на своем уровне ...

Если вы делаете выборку методом GetList, то в ней у элементов и разделов содержится параметр DEPTH_LEVEL. Его и нужно подставлять.
ответил 08 Май, 14 от MuLaLLlka (200 баллов)
00 голосов
Роберт Басыров, сделала по инструкции для построения меню из инфоблоков с помощью компонента "bitrix:menu.sections". У меня получилось, что меню 2-х уровневое, по числу вложенных разделов, и строка для URL выглядит так:
Код
"SECTION_URL" => "/catalog/?SECTION_ID=#ID#"

А можно сделать так, чтобы в меню попали еще и элементы инфоблока? Хочется, чтобы формировалась строка вида
Код
"/catalog/?SECTION_ID=13"
для папок, и
Код
"/catalog/?SECTION_ID=13&ELEMENT_ID=87"
для элементов инфоблока? И еще, в моем случае не важно какой я ставлю "DEPTH_LEVEL", 2 или 3 показывается одинаково, главное, чтобы больше 1.
Наверное, в таком случае нужно действовать, как описывал Артур Неудахин, без компонента "bitrix:menu.sections", ведь, судя по названию, он умеет подтягивать только секции?
ответил 04 Сен, 14 от SK8 (120 баллов)
00 голосов
Разве только секции? В руководстве явно на скриншотах показаны и элементы. Они должны подцепляться автоматически. То что предлагает Артур - это фактически то же самое что делает компонент. Если не показываются элементы, то проверяйте свои действия, что-то сделано не так.
ответил 10 Янв, 15 от Merigold (460 баллов)
00 голосов
Роберт Басыров, да, листами (как бы элементами) выглядят на самом деле более вложенные разделы. И в руководстве указан код только для "SECTION_URL" => "/catalog/phone/section.php?", а для ELEMENT_URL там запись не предусмотрена. Вот еще нашла такую же тему Компонент menu.sections - как сделать вывод элементов?на форуме. Но ответ ДядяДимы с подключением bitrix:catalog.section не очень поняла...
UPD.
Точно, я распечатала на страничке содержимое "$APPLICATION->IncludeComponent(bitrix:menu.sections...", там только секции. Но зато теперь, благодаря Вашим ссылкам я поняла как формируются расширения меню. Буду дополнять массив элементами.
ответил 27 Апр, 15 от SK8 (120 баллов)

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

0 голосов
1 ответ
спросил 09 Март, 14 от Nuts2010 (100 баллов)
0 голосов
3 ответов
спросил 23 Фев, 14 от Anton6 (160 баллов)
0 голосов
1 ответ
спросил 30 Ноя, 13 от LoLiTKa (620 баллов)
0 голосов
5 ответов
спросил 25 Ноя, 13 от Traxexx (900 баллов)
0 голосов
0 ответов
спросил 09 Ноя, 13 от Jagami (100 баллов)