Дата последнего изменения: 07.02.2024
Размещение собственного модуля в меню административного раздела осуществляется точно так же, как и размещение меню штатного модуля. Кроме того, можно использовать механизм Событий.
В качестве параметра иконки для страницы и пункта меню класс CSS.
"icon" => "mnu_my_module", "page_icon" => "my_module",
Стили прописываются в файле /local/modules/my_module/install/themes/.default/my_module.css
/*Menu icon*/
#fcmch_menu_icon {background-image:url(icons/my_module/mnu_my_module.gif);}
#fcmch_page_icon {background-image:url(icons/my_module/my_module.gif);}
Сами иконки необходимо загрузить в папку модуля /local/modules/my_module/install/themes/.default/icons/my_module/. При установке модуля содержимое папки /themes модуля должно быть скопировано в папку /local/themes/ и удалено оттуда при деинсталяции модуля.
Вариант кастомизации административного меню - это создать свой обработчик события OnBuildGlobalMenu. Так можно вставить новые разделы, пункты или секции с подпунктами. Или изменить что угодно в уже сформированном меню. Обработчик можно прописать например в файл /local/php_interface/init.php.
// DOC: http://dev.1c-bitrix.ru/api_help/main/events/onbuildglobalmenu.php
AddEventHandler("main", "OnBuildGlobalMenu", "DoBuildGlobalMenu");
function DoBuildGlobalMenu(&$aGlobalMenu, &$aModuleMenu) {
// пример формирования меню можно подсмотреть: /bitrix/modules/[module]/admin/menu.php
// системные варианты parent_menu: global_menu_desktop, global_menu_content, global_menu_services,
//global_menu_store, global_menu_statistics, global_menu_marketplace, global_menu_settings
// это на случай добавления новых пунктов или секций с подпунктами
$aModuleMenu[] = array(
"parent_menu" => "global_menu_settings",
"icon" => "default_menu_icon",
"page_icon" => "default_page_icon",
"sort"=>"900",
"text"=>"APC Opcode Cache",
"title"=>"APC INFO",
"url"=>"/local/admin/apc.php",
"more_url"=>array(),
);
// а это на случай вклинивания в уже существующей секции
foreach($aModuleMenu as $key => $menu) :
// наверно достаточно идентифицировать только по $menu["items_id"]
if ($menu["parent_menu"] == "global_menu_settings" && $menu["section"]=="TOOLS" && $menu["items_id"]=="menu_util") :
// пункт добавится в конец списка существующих пунктов в секции
$aModuleMenu[$key]["items"][] = array(
"text" => "APC Opcode Cache",
//"title" => "APC INFO",
"url" => "/bitrix/admin/apc.php",
"more_url" => array(),
);
endif;
endforeach;
/*
// пример своего глобального раздела меню
// нужен хотя бы один пункт в глобальном разделе, иначе раздел не появится
$aModuleMenu[] = array(
"parent_menu" => "global_menu_custom",
"icon" => "default_menu_icon",
"page_icon" => "default_page_icon",
"sort"=>"100",
"text"=>"Custom Item Text",
"title"=>"Custom Item Tille",
"url"=>"/bitrix/admin/custom_item.php",
"more_url"=>array(),
);
// если нужно добавить глобальный раздел меню, то его можно отдать тут или заранее выше добавить в $aGlobalMenu
$arRes = array(
"global_menu_custom" => array(
"menu_id" => "custom",
"page_icon" => "services_title_icon",
"index_icon" => "services_page_icon",
"text" => "Custom text",
"title" => "Custom title",
"sort" => 900,
"items_id" => "global_menu_custom",
"help_section" => "custom",
"items" => array()
),
);
return $arRes;
*/
} // function DoBuildGlobalMenu
Код сохранения настроек модуля, передаваемый в запросе, должен располагаться перед кодом вывода формы полей настроек модуля. Иначе параметры модуля не выведутся сразу после сохранения. Пример, код:
<?//Save form
if($request->isPost() && $request["save"] && check_bitrix_sessid()){
foreach($aTabs as $aTab){
if(count($aTab['OPTIONS'])) {
__AdmSettingsSaveOptions($module_id, $aTab["OPTIONS"]);
}
}
}?>
должен стоять перед выводом формы:
<!-- FORM TAB -->
<?php
$tabControl = new CAdminTabControl("tabControl", $aTabs);
?>
<? $tabControl->Begin(); ?>
<form method="post" action="<?=$APPLICATION->GetCurPage();?>?mid=<?=htmlspecialcharsbx($request["mid"]);?>&lang=<?=LANGUAGE_ID?>" name="<?=$module_id;?>">
<? $tabControl->BeginNextTab(); ?>
<?
foreach ($aTabs as $aTab)
{
if(count($aTab['OPTIONS'])) {
//$tabControl->BeginNextTab();
__AdmSettingsDrawList($module_id, $aTab['OPTIONS']);
}
}
?>
<? $tabControl->BeginNextTab(); ?>
<?require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/admin/group_rights.php");?>
<? $tabControl->Buttons(array('btnApply' => false, 'btnCancel' => false, 'btnSaveAndAdd' => false)); ?>
<?=bitrix_sessid_post(); ?>
</form>
<? $tabControl->End(); ?>
<!-- X FORM TAB -->