just_guy95
@just_guy95
Bitrix 1C

Bitrix. Как сделать меню подобного типа?

Доброе утро.
Необходимо реализовать меню на основе брендов (бренд является подразделом в инфоблоке) и чтобы эти бренды были отфильтрованы по алфавиту (по первому символу в название самого бренда). Все это дело должно подгружаться в меню автоматически, т.е. если в инфоблок добавили новый подраздел и к примеру назвали его «Company», то должна появится буква «C», если её не было и при наведении на неё в выпадающем списке должен появится этот раздел «Company».
Не могу даже представить как это реализовать, помогите пожалуйста.
5e4f819025b32948473622.jpeg
  • Вопрос задан
  • 71 просмотр
Решения вопроса 2
smilingcheater
@smilingcheater
Через menu.ext. Официальная дока - https://dev.1c-bitrix.ru/learning/course/index.php...
В этом ext-файле вам надо самостоятельно написать код, который будет выбирать разделы из нужного инфоблока, группировать их по буквам, генерировать список пунктов меню по найденным буквам, примерно так:
$bxSection = new CIBlockSection();
$res = $bxSection->GetList(...);

$letters = [];
while ($section = $res->Fetch()) {
    $letter = mb_substr($section['NAME'], 0, 1);
    if (empty($letter)) continue;
    
    if (empty($letters[$letter])) {
        $letters[$letter] = [
            'LETTER' => $letter,
            'SECTIONS' => []
        ];
    }

    $letters[$letter]['SECTIONS'][] = $section;
}

ksort($letters);

foreach ($letters as $letter) {
    $aMenuLinksExt[] = [
        $letter['LETTER'],
        '', // Ссылка, если нужна для самой буквы
        [],
        [
            'SECTIONS' => $letter['SECTIONS'], // Массив подразделов-брендов
        ],
    ];
}


далее в шаблоне вывода этого меню обработать подпункты, пришедшие в $arItem['SECTIONS']
(не уверен в 100% правильности кода, писал вслепую)
Ответ написан
@RuComMarket
Битрикс FullStack разработчик
в файле .{name}.menu.php (где name - ваш тип меню) вытаскиваем все подразделы и через foreach запихиваем в массив $aMenuLinks формируя названия и ссылки
в шаблоне разбираем массив через foreach распределяя в другой массив, где ключ будет первый символ раздела
например $menu[substr($arItem["TEXT"],0,1)] = $arItem
и дальше перебираем полученный массив насаживая на него верстку
это вариант используя именно стандартный компонент menu, можно сделать свой компонент, который не будет затрагивать файлы меню а сразу будет получать разделы в свой массив распределяя по первому ключу, а дальше также перебираем полученный массив насаживая на него верстку
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alexyarik
@alexyarik
Битрикс разработчик
Вот тут пример меню на инфоблоке, только вместо элементов получаете разделы, РНР функцией получаете первую букву для названия
https://phpjs.ru/2019/04/26/bitrix-%D1%8D%D0%BB%D0...
Ответ написан
Ваш ответ на вопрос

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

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