Полный цикл в digital

Меню в 1С Bitrix

Само по себе меню, как и везде, это элемент дизайна, при помощи которого мы упрощаем навигацию по сайту. Их может быть множество типов, верхнее, нижнее, левое и т.д., но в системе используются по умолчанию два, левое и правое меню, и это не мешает добавлять нам остальные типы при их необходимости. Давайте в этой статье рассмотрим:

  • ТИП меню и его виды
  • Статическое меню, файл с массивом $aMenuLinks
  • Динамическое меню, файл с приставкой _ext.php

Что такое меню в 1С Битрикс

Меню разделяется на основное и второстепенное. Основное меню соответствует самому верхнему уровню, второстепенное меню содержит ссылки на подразделы и документы текущего раздела.

Основной момент, меню в системе наследуется. То есть, если выбираем в компоненте определенный тип меню, то это меню будет отображаться, ниже на все разделы и страницы сайта, до момента пока в нем не создадим собственное меню.

Тип меню

Тип меню это определенные настройки в модуле управления структуры, который находится по адресу Настройки -> Настройки продукта -> Настройки модулей -> Управление структурой. Сам тип будет использован как префикс файла с шаблоном меню, а также он по этому префиксу идентифицируется самой системой. Как пример можно рассмотреть свой тип меню верхнего уровня top. После сохраннения у нас будет возможность выбирать в компоненте Меню верхнего уровня, а также выбирать этот тип в момент формирования раздела.

Отображение меню

Теперь давайте подробно разберемся, каким образом меню отображается. Любое меню в 1С Битрикс строится на основе двух составляющих:

  1. Файла с массивом данных $aMenuLinks, в нем определяется состав меню, где задаем название пунктов, его ссылки, по нажатию на которые переходим по структуре сайта. Все управление массивом осуществляется через административный раздел
  2. И вторая составляющая, это компонент, который является шаблоном внешнего представления меню. Он представлен в виде PHP кода, в нем обрабатывается массив данных, выдавая на выходе готовую HTML страничку

Статическое меню

Все данные по каждому типу меню хранятся в отдельном файле, имя этого файла будет содержать: .(тип меню).menu.php. Если открыть структуру файлов в административной части сайта, мы видим в главной директории присутствует несколько типов меню, в нашем случае Меню верхнего уровня.

Любое меню наследуется, то есть все разделы отображают его в том виде, в котором оно находится в главной директории. Если необходимо изменить пункты меню в определенном разделе, для этого достаточно скопировать этот файл с определенным типом, в раздел где по иному меню должно отображаться, и далее его можно отредактировать в визуальной части сайта. После этого оно применится к текущем разделу и его подразделам.

Пример структуры массива без подпунктов $aMenuLinks:

$aMenuLinks = array(
Array(
"Создание сайтов",
"/services/create-sites/",
Array(),
Array(),
""
),
Array(
"Виды услуг",
"/services/optimization/",
Array(),
Array(),
""
)
)

Пример структуры массива с подпунктами $aMenuLinks:

$aMenuLinks = array(
// Родительский пункт меню
Array(
"Создание сайтов",
"/services/create-sites/",
Array("/services/create-sites/"),
Array(
"FROM_IBLOCK" => 1,
// Пункт является родительским
"IS_PARENT" => 1,
// Уровень вложенности 1
"DEPTH_LEVEL" => 1
),
""
),
// Дочерний подпункт
Array(
"Создание Landing Page",
"/services/create-sites/landing-page/",
Array("/services/create-sites/landing-page/"),
Array(
"FROM_IBLOCK" => 1,
// Пункт не является родительским
"IS_PARENT" => 0,
// Уровень вложенности 2
"DEPTH_LEVEL" => 2
),
""
),
Array(
"Виды услуг",
"/services/optimization/",
Array(),
Array(),
""
)
)

Динамическое меню

Система Bitrix Framework позволяет создавать меню динамического типа. Т.е. массив данных таких меню генерируется автоматически на основании некоторых данных, получаемых с помощью программного кода. Данный код должен храниться в папке соответствующего раздела сайта в файле с именем .(тип меню).menu_ext.php. Основная задача подобных файлов — это манипуляция массивом $aMenuLinks.

Чтобы файл .(тип меню).menu_ext.php мог изменять массив $aMenuLinks, надо в настройках компонента «Меню» отметить checkbox «Подключать файлы с именами вида .тип.menu_ext.php».

Пример файла .(тип меню).menu_ext.php для вывода разделов инфоблока:

<?
/*
* Файл .(тип меню).menu_ext.php
*/
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
$aMenuLinksExt=$APPLICATION->IncludeComponent("bitrix:menu.sections", "", array(
"IS_SEF" => "Y",
"SEF_BASE_URL" => "/blog/", // каталог инфоблока на сайте
"SECTION_PAGE_URL" => "#SECTION_ID#/", // ID раздела
"DETAIL_PAGE_URL" => "#SECTION_ID#/#ELEMENT_ID#.html", // полный путь к элементу инфоблока
"IBLOCK_TYPE" => "company", // ID типа инфоблока из которого выводим
"IBLOCK_ID" => "5", // ID инфоблока из которого выводим
"DEPTH_LEVEL" => "3", // уровень вложенности
"CACHE_TYPE" => "A", // включение кеша
"CACHE_TIME" => "36000000" // время кеша
),
false
);
$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);
?>

Пример файла .(тип меню).menu_ext.php для вывода элементов инфоблока:

<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
if(CModule::IncludeModule("iblock"))
{
$IBLOCK_ID = 11; //здесь необходимо указать ID инфоблока
$arOrder = Array("SORT"=>"ASC");
$arSelect = Array("ID", "NAME", "IBLOCK_ID", "DETAIL_PAGE_URL");
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y");
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
$aMenuLinksExt[] = Array(
$arFields['NAME'],
$arFields['DETAIL_PAGE_URL'],
Array(),
Array(),
""
);
}
}
$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);
?>
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг