Нативно не знаю
Мне вообще не нравится идея, что модуль копирует свои файлы в админку (считай ядро).
Можно сделать так:
1. Повесить обработчик на OnBuildGlobalMenu и добавить пункт меню куда следует
2. При нажатии на этот пункт выдвигать SidePanel с фреймом ,ведущим на файл в вашем модуле.
Единственный минус, что у такого пункта меню нет прямой ссылки
Пример кода
Код |
---|
<?php
namespace SmartB\Services\B24Api;
use Bitrix\Main\Application;
use Bitrix\Main\Context;
use Bitrix\Main\EventManager;
\defined( 'B_PROLOG_INCLUDED' ) || die;
/**
* Class Handler
* @package SmartB\Services\B24Api
*/
class Handler
{
private $triggerClass = 'B24Api-trigger';
public function __construct()
{
$request = Context::getCurrent()->getRequest();
if ( $request->getRequestedPageDirectory() !== '/bitrix/admin' ) {
return;
}
EventManager::getInstance()->addEventHandler( 'main', 'OnBuildGlobalMenu', [ $this, 'addAdminMenuItem' ] );
EventManager::getInstance()->addEventHandler( 'main', 'OnAfterEpilog', [ $this, 'setTriggerHandler' ] );
}
/**
* Добавление пункта меню
*
* @param array $aGlobalMenu
* @param array $aModuleMenu
*/
public function addAdminMenuItem($aGlobalMenu, &$aModuleMenu): void
{
global $USER;
if ( !$USER->IsAdmin() ) {
return;
}
$aModuleMenu[] = [
'parent_menu' => 'global_menu_settings',
'sort' => 4000,
'text' => 'B24Api',
'icon' => 'sys_page_icon ' . $this->triggerClass,
'url' => '#',
];
}
/**
* При клике по пункту меню открывается Сайдпанель
*/
public function setTriggerHandler(): void
{
\CJSCore::Init( 'sidepanel' );
$url = str_replace( Application::getDocumentRoot(), '', __DIR__ ) . '/admin/template.php';
?>
<sc ript>
document.addEventListener('DOMContentLoaded', () => {
const triggerElement = document.querySelector('.<?= $this->triggerClass ?>');
if (!triggerElement) {
return;
}
triggerElement.parentNode.addEventListener('click', (event) => {
event.preventDefault();
BX.SidePanel.Instance.open('<?= $url ?>', {
width: 500,
cacheable: false,
requestMethod: 'post',
requestParams: {
callerid: 'B24Api'
},
allowChangeHistory: false,
});
});
});
</sc ript>
<?php
}
} |