Конфигурация административного меню модуля
Описание
В данном разделе описывается управление главным административным меню.
Основная структура
Для каждого модуля параметры меню задаются файлом /bitrix/modules/каталог_модуля/admin/menu.php
. Результатом работы этого файла должен стать описательный массив меню модуля. Возможности API позволяют создать древовидное меню с любым уровнем вложенности, а также, с динамической подгрузкой отдельных ветвей.
Файл menu.php должен вернуть ассоциативный массив следующей структуры:
Ключ | Описание |
---|---|
parent_menu | Идентификатор раздела меню. Имеет смысл только для элемента верхнего уровня дерева меню модуля. Может принимать одно из следующих значений:
|
sort | Относительный "вес" пункта меню для сортировки. |
url | Ссылка пункта меню. При переходе пользователем на страницу с таким URL данный пункт меню будет подсвечен. |
more_url | Список дополнительных URL, по которым данный пункт меню должен быть подсвечен. |
text | Текст ссылки пункта меню. |
title | Текст всплывающей подсказки пункта меню. |
icon | CSS-класс иконки пункта меню. |
page_icon | CSS-класс иконки пункта меню для вывода на странице индекса (класс увеличенной иконки). |
module_id | Идентификатор модуля, к которому относится меню. |
dynamic | Флаг, показывающий, должна ли ветвь, начинающаяся с текущего пункта, подгружаться динамически. |
items_id | Идентификатор ветви меню. Используется для динамического обновления ветви. |
items | Список дочерних пунктов меню. Представляет собой массив, каждый элемент которого является ассоциативным массивом аналогичной структуры. |
Пример использования
Листинг файла menu.php модуля Веб-форм (простое меню без динамической подгрузки).
<? IncludeModuleLangFile(__FILE__); // в menu.php точно так же можно использовать языковые файлы if($APPLICATION->GetGroupRight("form")>"D") // проверка уровня доступа к модулю веб-форм { // сформируем верхний пункт меню $aMenu = array( "parent_menu" => "global_menu_services", // поместим в раздел "Сервис" "sort" => 100, // вес пункта меню "url" => "form_list.php?lang=".LANGUAGE_ID, // ссылка на пункте меню "text" => GetMessage("FORM_MENU_MAIN"), // текст пункта меню "title" => GetMessage("FORM_MENU_MAIN_TITLE"), // текст всплывающей подсказки "icon" => "form_menu_icon", // малая иконка "page_icon" => "form_page_icon", // большая иконка "items_id" => "menu_webforms", // идентификатор ветви "items" => array(), // остальные уровни меню сформируем ниже. ); // далее выберем список веб-форм и добавим для каждой соответствующий пункт меню require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/form/include.php"); $z = CForm::GetMenuList(array("LID"=>LANGUAGE_ID)); while ($zr=$z->GetNext()) { if (strlen($zr["MENU"]) > 0) { // массив каждого пункта формируется аналогично $aMenu["items"][] = array( "text" => $zr["MENU"], "url" => "form_result_list.php?lang=".LANGUAGE_ID."&WEB_FORM_ID=".$zr["ID"], "icon" => "form_menu_icon", "page_icon" => "form_page_icon", "more_url" => array( "form_view.php?WEB_FORM_ID=".$zr["ID"], "form_result_list.php?WEB_FORM_ID=".$zr["ID"], "form_result_edit.php?WEB_FORM_ID=".$zr["ID"], "form_result_print.php?WEB_FORM_ID=".$zr["ID"], "form_result_view.php?WEB_FORM_ID=".$zr["ID"] ), "title" => GetMessage("FORM_RESULTS_ALT") ); } } // если нам нужно добавить ещё пункты - точно так же добавляем элементы в массив $aMenu["items"] // ............ // вернем полученный список return $aMenu; } // если нет доступа, вернем false return false; ?>
Динамическая подгрузка ветвей меню.
Как уже было сказано выше, возможно реализовать меню с динамической подгрузкой ветвей. Для этого нужно сделать следующие шаги:
- установить у пункта меню, начинающего динамическую ветвь параметр
"dynamic"=>true
; - установить у пункта меню, начинающего динамическую ветвь значение параметра
"items_id"
и идентификатор модуля; - добавить проверку флага "группа элементов открыта" при создании элементов ветви, предполагающие динамическую подгрузку.
Последний пункт представляет собой проверку метода CAdminMenu::IsSectionActive()
. Поскольку скрипт, формирующий меню, выполняется в контексте экземпляра класса CAdminMenu, то достаточно осуществить проверку $this->IsSectionActive()
, в качестве параметра указав значение параметра "items_id"
требуемой ветви.
Приведем в качестве примера то же самое меню модуля Веб-форм, но уже с динамической подгрузкой списка форм:
<? IncludeModuleLangFile(__FILE__); // в menu.php точно так же можно использовать языковые файлы if($APPLICATION->GetGroupRight("form")>"D") // проверка уровня доступа к модулю веб-форм { // верхний пункт меню оставим без изменений $aMenu = array( "parent_menu" => "global_menu_services", // поместим в раздел "Сервис" "sort" => 100, // вес пункта меню "url" => "form_list.php?lang=".LANGUAGE_ID, // ссылка на пункте меню "text" => GetMessage("FORM_MENU_MAIN"), // текст пункта меню "title" => GetMessage("FORM_MENU_MAIN_TITLE"), // текст всплывающей подсказки "icon" => "form_menu_icon", // малая иконка "page_icon" => "form_page_icon", // большая иконка "items_id" => "menu_webforms", // идентификатор ветви "items" => array(), // остальные уровни меню сформируем ниже. ); // сформируем пункты меню, которые будут подгружаться динамически $arFormsList = array(); if ( method_exists($this, "IsSectionActive") // для поверки совместимости && $this->IsSectionActive("menu_webforms_list") // если активна секция меню с идентфикатором "menu_webforms_list" || // можно также добавить любые свои условия. например, показывать эту ветвь на всех страницах, // где определена константа FORM_MENU_OPEN со значением 1 defined('FORM_MENU_OPEN') && FORM_MENU_OPEN == 1) { // далее выполним ту же самую выборку, что и в простом варианте, но элементы будем сохранять в отдельный массив. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/form/include.php"); $z = CForm::GetMenuList(array("LID"=>LANGUAGE_ID)); while ($zr=$z->GetNext()) { if (strlen($zr["MENU"]) > 0) { // массив каждого пункта формируется аналогично $arFormsList[] = array( "text" => $zr["MENU"], "url" => "form_result_list.php?lang=".LANGUAGE_ID."&WEB_FORM_ID=".$zr["ID"], "icon" => "form_menu_icon", "page_icon" => "form_page_icon", "more_url" => array( "form_view.php?WEB_FORM_ID=".$zr["ID"], "form_result_list.php?WEB_FORM_ID=".$zr["ID"], "form_result_edit.php?WEB_FORM_ID=".$zr["ID"], "form_result_print.php?WEB_FORM_ID=".$zr["ID"], "form_result_view.php?WEB_FORM_ID=".$zr["ID"] ), "title" => GetMessage("FORM_RESULTS_ALT") ); } } } // теперь сформируем корень динамической ветви меню. обратите внимание на выделенные параметры. $aMenu["items"][] = array( "text" => GetMessage("FORM_RESULTS_ALL"), "url" => "form_result_list.php?lang=".LANGUAGE_ID, "title" => GetMessage("FORM_RESULTS_ALL_ALT"), "dynamic" => true, // !!!!!!!!!!!!!!!!!!!!!!!!! "module_id" => "form", // !!!!!!!!!!!!!!!!!!!!!!!!! "items_id" => "menu_webforms_list", // !!!!!!!!!!!!!!!!!!!!!!!!! "items" => $arFormsList, // !!!!!!!!!!!!!!!!!!!!!!!!! ); // если нам нужно добавить ещё пункты - точно так же добавляем элементы в массив $aMenu["items"] // ............ // вернем полученный список return $aMenu; } // если нет доступа, вернем false return false; ?>
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.