Для управления меню больше не нужно создавать физические файлы, удобный интерфейс в административном разделе позволит создать и настроить неограниченное количество меню для сайта и вывести их при помощи компонента.
О модуле- Меню работает на основе HighloadBlock;
- Поддерживает все стандартные шаблоны для меню от 1С Битрикс;
- Легко управлять и добавлять многоуровневые разделы;
- Позволяет расширять меню при помощи AddEventHandler;
- Поддерживает композитный режим;
- Готовые адаптивные шаблоны меню.
Решение устанавливается стандартно для Marketplace
http://marketplace.1c-bitrix.ru/about/index.php- Активируйте модуль, передите в раздел "Сервисы" -> "Меню";
- Выберите или создайте автоматически нужный для модуля HighloadBlock;
- Выберите из списка добавленное ранее меню или создайте новое при помощи кнопки "Добавить новое меню";
- Укажите название меню (отображается только в админ. панели);
- Нажмите добавить строку - это отдельный пункт в меню;
- Иконка (крестик) слева сверху - удаляет пункт меню;
- Иконка (плюс) справа сверху - добавляет вложенные пункты меню;
- Пункты меню можно перетаскивать при помощи мышки.
Свойства пункта меню:- Название - отображается как название на сайте;
- Ссылка - ссылка на сайте (рекомендуется указывать без домена от корня сайта);
- Дополнительно: Классы - будут переданы в шаблон компонента;
- Дополнительно: Атрибуты - будут переданы в шаблон компонента;
Как добавить созданное меню на сайтДля отображения созданного меню на сайте есть два варианта:
1. Разместить компонент при помощи визуального редактора на нужной вам странице или включаемой области: В правой части визуального редактора среди списка компонентов нажмите на "ПраймВеб", затем перетащите компонент "Меню" в редактируемую область. Откроются настройки компонента (ниже описание каждого параметра)
2. При помощи кода:
<?$APPLICATION->IncludeComponent(
"pr:menu",
"horizontal",
Array(
"CACHE_GROUPS" => "Y",
"CACHE_TIME" => "36000000",
"CACHE_TYPE" => "A",
"HLBLOCK_ID" => "1",
"MENU_ID" => "1"
)
);?><br>
|
Список параметров компонента:- Кеширование (CACHE_GROUPS, CACHE_TIME, CACHE_TYPE) - настройки для кеширования компонента
- HighloadBlock: ID (HLBLOCK_ID) - Идентификатор Highload блока
- Menu: ID (MENU_ID) - Идентификатор созданного меню
Для разработчиковКак удалить кеш определенного меню?Кеш компонента меню размещается по адресу:
~/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 кешируется вместе с компонентом.
Все вопросы и пожелания можно отправить по e-mail:
support@01pr.ru с темой: Модуль "Конструктор меню".