| Готовые решения | Констркутор меню
Констркутор меню для Битрикс
Стоимость: 1000 руб.
Сроки: 1 д.
Платформа: 1С-Битрикс
Для управления меню больше не нужно создавать физические файлы, удобный интерфейс в административном разделе позволит создать и настроить неограниченное количество меню для сайта и вывести их при помощи компонента.

О модуле
  • Меню работает на основе HighloadBlock;
  • Поддерживает все стандартные шаблоны для меню от 1С Битрикс;
  • Легко управлять и добавлять многоуровневые разделы;
  • Позволяет расширять меню при помощи AddEventHandler;
  • Поддерживает композитный режим;
  • Готовые адаптивные шаблоны меню.

Решение устанавливается стандартно для Marketplace http://marketplace.1c-bitrix.ru/about/index.php
  • Активируйте модуль, передите в раздел "Сервисы" -> "Меню";
  • Выберите или создайте автоматически нужный для модуля HighloadBlock;
  • Выберите из списка добавленное ранее меню или создайте новое при помощи кнопки "Добавить новое меню";
  • Укажите название меню (отображается только в админ. панели);
  • Нажмите добавить строку - это отдельный пункт в меню;
  • Иконка (крестик) слева сверху - удаляет пункт меню;
  • Иконка (плюс) справа сверху - добавляет вложенные пункты меню;
  • Пункты меню можно перетаскивать при помощи мышки.

Свойства пункта меню:
  • Название - отображается как название на сайте;
  • Ссылка - ссылка на сайте (рекомендуется указывать без домена от корня сайта);
  • Дополнительно: Классы - будут переданы в шаблон компонента;
  • Дополнительно: Атрибуты - будут переданы в шаблон компонента;
Для разработчиков

Как удалить кеш определенного меню?

Кеш компонента меню размещается по адресу:
~/bitrix/cache/#SITE_ID#/pr/menu/#HLBLOCK_ID#_#MENU_ID#/
Можно удалить при помощи кода (например HighloadBlock в котором создано меню = 5, ID меню = 3):
BXClearCache(true, '/s1/pr/menu/5_3/');

Как добавить (разделы/элементы/произвольные ссылки) для нужного пункта меню?

Перед тем как модуль сформирует финальный массив пунктов меню, добавлено событие OnBeforeItemsArrayMake.
/**
* Передается массив
*
* @param int $hl_id - ID HighloadBlock блока
* @param int $menu_id - ID меню
* @param array menu_items - массив пунктов меню из базы данных
* @return array - должен вернуть массив
*/
Событие должно вернуть такой же массив с вашими правками. Во внимание будет принят только menu_items.

Пример кода:
AddEventHandler("pr.menu", "OnBeforeItemsArrayMake", "prOnBeforeItemsArrayMake");
function prOnBeforeItemsArrayMake($data = array())
{
    \CModule::IncludeModule('iblock');
    $hl_id   = $data['hl_id'];
    $menu_id = $data['menu_id'];
    // для меню ID = 3 из HighloadBlock = 5
    if($menu_id == '3' AND $hl_id == '5')
    {
        // Выберем нужные разделы из инфоблока
        $res = \CIBlockSection::GetList(array(), array('IBLOCK_ID' => 6), false, array('ID', 'SECTION_PAGE_URL', 'NAME'));
        while($arF = $res->GetNext())
        {
            $new_item = array(
                'id'         => 'section_'.$arF['ID'], // ОБЯЗАТЕЛЬНО добавить префикс к ID, чтобы не смешивать с ID пунктов меню из базы данных
                'parent'     => '5', // К какому пункту меню добавляем дополнительные элементы
                'name'       => $arF['NAME'], // название пункта меню
                'link'       => $arF['SECTION_PAGE_URL'], // ссылка пункта меню
                'classes'    => 'custom_class', // классы если требуется
                'attributes' => 'custom_attr', // атрибуты если требуется
            );
            $data['menu_items'][] = $new_item; // дополним в массив всех пунктов меню новый пункт
        }
    }
    // вернем обратно кастомизированный массив
    return $data;
}
Событие OnBeforeItemsArrayMake кешируется вместе с компонентом.
Отправить заявку