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

$aMenuLinksExt для многоуровневого меню

00 голосов
3
Задача: на одной из страниц должно быть показано альтернативное меню, состоящее из разделов и элементов каталога.
Решение: делаю через .left.menu_ext.php, где формирую массив $aMenuLinksExt с помощью menu.sections (как в документации). Этот компонент выводит только название разделов, поэтому для получения элементов разделов предлагают кастомизировать компонент. Альтернатива - вручную сформировать массив $aMenuLinksExt. Но из документации я не могу понять, какая должна быть структура для многоуровневого меню.
Пример для 1 уровня:


Код
Array
(
    [0] => пункт меню 1
        Array
            (
                [0] => заголовок пункта меню
                [1] => ссылка на пункте меню
                [2] => массив дополнительных ссылок для подсветки пункта меню:
                    Array
                        (
                            [0] => ссылка 1
                            [1] => ссылка 2
                         )
                [3] => массив дополнительных переменных передаваемых в шаблон меню:
                    Array
                        (
                            [имя переменной 1] => значение переменной 1
                            [имя переменной 2] => значение переменной 2
                         )
                [4] => условие, при котором пункт меню появляется 
                       это PHP выражение, которое должно вернуть "true"
            )
    [1] => пункт меню 2
    [2] => пункт меню 3
    ...
) 

Как оно должно выглядеть для нескольких уровней?


Если такой возможности нет, может кто-нибудь поделиться опытом кастомизации?
спросил 07 Фев, 14 от KiRo (100 баллов)

3 Ответы

00 голосов
Вопрос актуален как никогда... может кто-то поделиться готовым решением?
ответил 19 Июнь, 14 от wokmon300 (180 баллов)
00 голосов
Код
<?
$aMenuLinks = Array(
   Array(
      "КОМПАНИЯ", 
      "/shop/catalog/masla/", 
      Array(), 
      Array("FROM_IBLOCK"=>"1", "IS_PARENT"=>"1", "DEPTH_LEVEL"=>"1"), 
      "" 
   ),
   Array(
      "Карта сайта", 
      "search/map/", 
      Array(), 
      Array("FROM_IBLOCK"=>"1", "IS_PARENT"=>"", "DEPTH_LEVEL"=>"2"), 
      "" 
   ),
   Array(
      "Поиск", 
      "search/", 
      Array(), 
      Array("FROM_IBLOCK"=>"1", "IS_PARENT"=>"", "DEPTH_LEVEL"=>"2"), 
      "" 
   ),
   Array(
      "ДОКУМЕНТАЦИЯ", 
      "/shop/catalog/masla/", 
      Array(), 
      Array("FROM_IBLOCK"=>"2", "IS_PARENT"=>"1", "DEPTH_LEVEL"=>"1"), 
      "" 
   ),
   Array(
      "Поиск", 
      "search/", 
      Array(), 
      Array("FROM_IBLOCK"=>"1", "IS_PARENT"=>"", "DEPTH_LEVEL"=>"2"), 
      "" 
   ),
   Array(
      "ДИЛЕРУ", 
      "/shop/catalog/masla/", 
      Array(), 
      Array("FROM_IBLOCK"=>"3", "IS_PARENT"=>"1", "DEPTH_LEVEL"=>"1"), 
      "" 
   ),
   Array(
      "Поиск", 
      "search/", 
      Array(), 
      Array("FROM_IBLOCK"=>"1", "IS_PARENT"=>"", "DEPTH_LEVEL"=>"2"), 
      "" 
   )
);
?>
ответил 18 Окт, 14 от brother94 (100 баллов)
00 голосов
у меня получилось так

<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

global $APPLICATION;

if(CModule::IncludeModule("iblock"))
{

$IBLOCK_ID = 32; // указываем из акого инфоблока берем элементы

$arOrder = Array("NAME"=>"ASC"); // сортируем по свойству SORT по возрастанию
$arSelect = Array("ID", "NAME", "IBLOCK_ID", "DETAIL_PAGE_URL");
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y", "PROPERTY_razdel"=> $_REQUEST["SECTION_ID"]);
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);

while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields(); // берем поля
// echo $arFields['NAME']." - arFields['NAME']<br>";
/* echo '<pre>';
print_r($arFields); //
echo '</pre>'; */

// начинаем наполнять массив aMenuLinksExt нужными данными
$aMenuLinksExt[] = Array(
$arFields['NAME'],
$arFields['DETAIL_PAGE_URL'],
Array(),
Array(),
""
);

} // while($ob = $res->GetNextElement())

} // if(CModule::IncludeModule("iblock"))

/* echo "<br>Массив aMenuLinksExt - дополнительный";
echo '<pre>';
print_r($aMenuLinksExt);
echo '</pre>'; */

$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);
// $aMenuLinks = array_merge($aMenuLinks);

?>
ответил 19 Фев, 15 от wokmon300 (180 баллов)

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

0 голосов
3 ответов
0 голосов
1 ответ
0 голосов
1 ответ
спросил 21 Апр, 14 от Xenam (160 баллов)
0 голосов
3 ответов
0 голосов
3 ответов