Разработка модулей для Битрикс. Глобальное меню

Разработка модулей для Битрикс. Глобальное меню

Глобальным в админке Битрикса называется левое верхнее меню с кнопками «Контент» и «Настройки» в версии «Старт». В самых дорогих версиях меню содержит ещё пункты «Сервисы», «Магазин» и «Веб-аналитика».

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


В первую очередь нам нужно добавить в файл /bitrix/php_interface/init.php следующий триггер (наш модуль называется «Техподдержка сайтов»):

AddEventHandler("main", "OnBuildGlobalMenu", "AddGlobalMenuItem");
function AddGlobalMenuItem() 
{
        $arr = array(
            "global_menu_websites_support" => array(
                "icon" => "button_websites_support",
		"page_icon" => "page_websites_support",
		"index_icon" => "index_websites_support",
		"text" => 'Техподдержка сайтов',
		"title" => 'Техподдержка сайтов',
		"url" => "websites_support_main.php?lang=".LANGUAGE_ID,
		"sort" => 500,
		"items_id" => "global_menu_websites_support",
		"help_section" => "settings",
		"items" => array()
	));
    return $arr;
}

Как видите, основная информация здесь про иконку. Ключи массива, которые следует пояснить , - page_icon и index_icon. Как ни странно, но это ID div'-ов, на фоне которых будет стоять нужная нам иконка. Сам же путь до картинок нужно прописать в файле /bitrix/themes/.default/websites_support.css :

#button_websites_support {background-image:url(icons/websites_support/button_websites_support.png);}
#page_websites_support {background-image:url(icons/websites_support/page_websites_support.png);}
#index_websites_support {background-image:url(icons/websites_support/index_websites_support.png);}

Теперь посмотрим, как сделать подпункты нашего меню. Для этого идём в файл меню нашего модуля (/bitrix/modules/websites_support/admin/menu.php) и добавляем туда следующий код:

IncludeModuleLangFile(__FILE__);
$aMenu[] = array(
	"parent_menu" => "global_menu_websites_support",
	"section" => "websites_support",
	"sort" => 100,
	"url" => "websites_support_clients_list.php",
	"text" => 'Клиенты',
	"title" => 'Клиенты',
	"icon" => "websites_support_menu_icon_clients",
	"page_icon" => "websites_support_page_icon_clients",
	"module_id" => "websites_support",
	"items_id" => "menu_websites_support",
);
$aMenu[] = array(
	"parent_menu" => "global_menu_websites_support",
	"section" => "websites_support",
	"sort" => 200,
	"url" => "websites_support_workmans_list.php",
	"text" => 'Сотрудники',
	"title" => 'Сотрудники',
	"icon" => "websites_support_menu_icon_workmans",
	"page_icon" => "websites_support_page_icon_workmans",
	"module_id" => "websites_support",
	"items_id" => "menu_websites_support",
);
$aMenu[] = array(
	"parent_menu" => "global_menu_websites_support",
	"section" => "websites_support",
	"sort" => 300,
	"url" => "websites_support_tasks_list.php",
	"text" => 'Обращения',
	"title" => 'Обращения',
	"icon" => "websites_support_menu_icon_tasks",
	"page_icon" => "websites_support_page_icon_tasks",
	"module_id" => "websites_support",
	"items_id" => "menu_websites_support",
);
return $aMenu;

В ключе parent_menu каждого пункта указано, что родительским является созданное нами глобальное меню. Осталось только прописать пути до иконок подпунктов. Как вы уже догадались, их нужно добавить в тот же файл /bitrix/themes/.default/websites_support.css :

#websites_support_menu_icon_clients {background-image:url(icons/websites_support/websites_support_clients_18_x_18.png);}
#websites_support_page_icon_clients {background-image:url(icons/websites_support/websites_support_clients_32_x_32.png);}

#websites_support_menu_icon_workmans {background-image:url(icons/websites_support/websites_support_workmans_18_x_18.png);}
#websites_support_page_icon_workmans {background-image:url(icons/websites_support/websites_support_workmans_32_x_32.png);}

#websites_support_menu_icon_tasks {background-image:url(icons/websites_support/websites_support_tasks_18_x_18.png);}
#websites_support_page_icon_tasks {background-image:url(icons/websites_support/websites_support_tasks_32_x_32.png);}

В итоге получаем вот такой результат:

Разработка модулей для Битрикс. Глобальное меню
Дата: 26 августа 2010
Теги: глобально меню, модули
Добавить в закладки:

Комментарии (5)

Алексей, 16 Сентября 2010

Глобальное меню? Немного, засомневался, зашел в учебные курсы получается что меню Административным называется коллеги, либо я не прав (тогда приношу извинения) либо подправьте с точки зрения терминологии Битрикс

spree
spree, 16 Сентября 2010

Не буду править, возможно в интерфейсе пользователя оно называется административным. Я рассматриваю меню с программерской точки зрения. Обратите внимание на название события в триггере: AddEventHandler("main", "OnBuildGlobalMenu", "AddGlobalMenuItem");

zehya, 13 Ноября 2010

сделал все как написано в статье, перепроверил 40 раз по-строчно - ну не хочет работать, вообще ни в какую :( может быть какой-нить кэш обновить надо или еще что-нибудь сделать?

Денис, 6 Июля 2011

Вы забыли указать версию битрикс.
По этому вопросу в комментариях к документации есть один ответ: <a href="http://dev.1c-bitrix.ru/api_help/main/events/onbuildglobalmenu.php">http://dev.1c-bitrix.ru/api_help/main/events/onbuildglobalmenu.php</a>;

Денис, 6 Июля 2011

Извиняюсь, ссылку думал по умному указать :)
http://dev.1c-bitrix.ru/api_help/main/events/onbuildglobalmenu.php