Блоки-меню

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Блок-меню заполняется ссылками автоматически. Вместо ручного списка пунктов блок получает их от Битрикс24: разделы каталога магазина или ссылки личного кабинета. Такое поведение включает subtype: menu в секции block манифеста блока.

Сценарий подходит магазинам, где структура каталога меняется, и страницам личного кабинета покупателя. Если пункты меню постоянные, подтип не нужен: ссылки описывают обычными карточками или ключом menu манифеста, который отвечает за многоуровневое меню с ручными пунктами.

Источник ссылок задают в параметре subtype_params.source: Меню каталога или Меню личного кабинета.

Параметры подтипа

Параметр

Значение по умолчанию

Что задает

source

Источник ссылок: catalog или personal

selector

.landing-block-node-menu-list-item-link

Селектор ссылки пункта меню. В ноды по этому селектору система записывает подставленные пункты, поэтому селектор должен быть описан в ключе nodes манифеста

count

5

Максимальное число автоматически добавляемых пунктов. Действует только для source: catalog: набор ссылок личного кабинета фиксирован

navbarCollapseSection

.navbar-collapse

Селектор сворачиваемой части навигации

navbarTogglerButton

button.navbar-toggler

Селектор кнопки, которая разворачивает меню

Что важно знать про selector:

  • селектор должен быть описан в ключе nodes манифеста. Иначе подтип не найдет, куда писать, и пункты не подставятся
  • в штатных блоках используют три значения: .landing-block-node-menu-list-item-link в блоках-шапках с горизонтальным меню, .landing-block-node-list-item в блоках со списком ссылок и .landing-node-item-link в блоках личного кабинета

Расширения для подстановки ссылок не нужны, но за поведение самого меню на странице они отвечают, поэтому их подключают в assets.ext:

  • landing_menu — во всех блоках-меню
  • landing_header — дополнительно в блоках-шапках

Что делает подтип при добавлении блока

Подтип не дописывает пункты к существующим, а заменяет их: он вызывает механизм обновления нод и записывает свой набор целиком. У каждого пункта задаются текст ссылки и адрес, у пунктов каталога дополнительно атрибут data-url с тем же адресом.

Помимо ссылок подтип готовит и сворачиваемое меню: он описывает в манифесте скрытые атрибуты для .navbar-collapse и кнопки button.navbar-toggler, а при добавлении блока записывает в них идентификатор вида navBar<ID блока>: в .navbar-collapse — атрибут id, в кнопку — aria-controls с тем же значением и data-target со значением через решетку. Благодаря этому два меню на одной странице не конфликтуют.

Меню каталога: source: catalog

При добавлении блока система подставляет в него разделы текущего каталога магазина.

Пример манифеста:

'block' => [
    'name' => 'Меню с логотипом слева и пунктами меню справа',
    'section' => 'menu',
    'subtype' => 'menu',
    'subtype_params' => [
        'selector' => '.landing-block-node-menu-list-item-link',
        'count' => 5,
        'source' => 'catalog',
    ],
],
'nodes' => [
    '.landing-block-node-menu-list-item-link' => [
        'name' => 'Пункт меню',
        'type' => 'link',
    ],
],
'assets' => [
    'ext' => ['landing_menu'],
],

Пример разметки пункта меню:

<ul class="landing-block-node-menu-list">
    <li>
        <a class="landing-block-node-menu-list-item-link" href="#">Каталог</a>
    </li>
</ul>

Меню каталога заполняется только на сайте типа «Магазин» и берет разделы того каталога, который выбран в настройках сайта. Если такого контекста нет, пункты не подставятся и блок останется с исходной разметкой.

Меню личного кабинета: source: personal

Если в source указать значение personal, система подставит готовый набор ссылок личного кабинета:

  • Персональный раздел
  • Текущие заказы
  • Личный счет
  • Личные данные
  • История заказов
  • Профили заказов
  • Корзина
  • Подписка

Набор фиксированный: он не зависит ни от разметки блока, ни от каталога, и параметр count на него не влияет. Манифест описывают так же, как для каталога, только source меняют на personal и count не задают.

Как проверить блок-меню

  1. Найдите подходящий штатный блок методом landing.block.getrepository в разделе menu.
  2. Посмотрите его манифест методом landing.block.getmanifestfile и сверьте subtype_params со своим блоком.
  3. Свой блок зарегистрируйте методом landing.repo.register и добавьте на страницу методом landing.landing.addblock.
  4. Проверьте результат методом landing.block.getcontent с параметром editMode = true: в разметке должны появиться подставленные ссылки. Без editMode метод вернет опубликованную версию блока, где изменений еще нет.

Права и ограничения

Scope: landing

Кто может выполнять метод: в зависимости от метода

Ограничения:

  • источника данных два: catalog и personal. В штатных блоках встречается третье значение sourcestructure, но в текущей версии модуля оно ничего не подставляет. Произвольный источник в subtype_params не подключается
  • пункты подставляются один раз, при добавлении блока на страницу. Если каталог изменился, меню не перестроится само — обновите ссылки методом landing.block.updatenodes

Продолжите изучение

Предыдущая
Следующая