@photosho

Как лучше реализовать подменю с разбиением на «категории»?

Есть выпадающее меню, построенное так, что файл основного меню называется ".top.menu.php", а файл выпадающего - ".left.menu.php", который создается в каждом разделе и содержит в себе список пунктов выпадающего меню для этого раздела.

Возникла задача разделить пункты выпадающего меню по "категориям". То есть, сверху - заголовок (не ссылка, а просто визуальное оформление для пользователя), а под ним - пункты меню, относящиеся к этой "категории"; далее, тут же - новый заголовок и другие пункты меню.

Как лучше было бы это реализовать с позиции Bitrix? Есть такой вариант: создавать "категории" при помощи пустых пунктов (без ссылки), возможно, передавать с ними в массив какой-то дополнительный параметр. В шаблоне, при выводе, когда встречаешь такой пункт, создаешь для него специальную разметку, как для заголовка. Правильно ли было бы реализовать это так или есть другой, лучший, способ?
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 1
@kudis
Bitrix developer
Используйте внутри раздела файл `.left.menu_ext.php`
Не забудьте разрешить его использование в меню "USE_EXT" => "Y"
сам файл будет выглядеть примерно так:
use Bitrix\Main\Loader,
    Bitrix\Main\LoaderException;

try {
    if (!Loader::includeModule('iblock')) {
        return;
    }
} catch (LoaderException $e) {
    return;
}

$obItems = CIBlockElement::getList(
    [
        'SORT' => 'asc',
        'NAME' => 'asc'
    ],
    [
        'IBLOCK_TYPE' => 'type',
        'IBLOCK_CODE' => 'iblockcode',
        'ACTIVE' => 'Y'
    ],
    false,
    false,
    [
        'ID',
        'CODE',
        'NAME',
    ]
);

$aMenuLinksExt = [];

while ($arItem = $obItems->fetch()) {
    $aMenuLinksExt[] = [
        $arItem['NAME'],
        $arItem['CODE'] . '/',
        [],
        [],
        ''
    ];
}

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

здесь в левое меню добавляются элементы инфоблока.
Можете добавлять секции.
Для шаблона меню можете передать параметр через 4-й элемент масива (Например: UNCLICKABLE)
$aMenuLinksExt[] = [
        $arItem['NAME'],
        $arItem['CODE'] . '/',
        [],
        ['UNCLICKABLE' => true],
        ''
    ];

В `$arResult` шаблона меню этот параметр придёт в массиве `'PARAMS'`
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы