ISPmanager: Пример плагина. Добавление пункта меню

Материал из ISPWiki
Перейти к: навигация, поиск

В данной статье описан пример того, как добавить в левое меню свой раздел и вывести нужные данные при переходе в него.

Описание интерфейса

Чтобы добавить пункт меню, нужно создать xml файл со следующим описанием

#cat /usr/local/mgr5/etc/xml/ispmgr_mod_menu.xml  
<?xml version="1.0" encoding="UTF-8"?>
<mgrdata> 
<mainmenu level="admin+">    
<node name="account">         
<node name="myfunc" />    
</node> 
</mainmenu> 

<handler name="myaddon" type="xml"> 
<func name="myfunc" /> 
</handler> 

<lang name="ru"> 
<messages name="desktop"> 
<msg name="menu_myfunc">Test</msg>
</messages>
</lang> 
</mgrdata>

Путь должен быть обязательно /usr/local/mgr5/etc/xml/ и имя обязательно ispmgr_mod_<произвольное наименование>.xml

Как видно из файла, в теге mainmenu указывается на каком уровне будет виден раздел. В моем примере - admin+ - уровень суперадминистратора.

<node name="account"> - означает, что пункт меню будет добавлен в подраздел меню "Учётные записи".

<node name="myfunc"/> - объявляем свою функцию. Тут тонкий момент, чтобы панель начала отображать наш пункт меню необходимо, чтобы в панели была функция с соответствующим названием.

Добавление собственной функции

Объявляем функцию myfunc через аддон:

<handler name="myaddon" type="xml"> 
<func name="myfunc" /> 
</handler>

Аддон должен быть расположен в директории /usr/local/mgr5/addon/

# cat /usr/local/mgr5/addon/myaddon  
#!/bin/bash 
cat /tmp/tmp

При нажатии на раздел Test (такое название ему присвоено в блоке lang), будет вызываться myaddon, который должен вернуть панели полный xml с необходимыми данными.

В моем случае функция возвращает следующие данные:

# cat /tmp/tmp  
<?xml version="1.0" encoding="UTF-8"?> 
<doc lang="ru" func="webdomain" binary="/ispmgr" host="http://10.10.10.10:1500" features="6b49a92f5cc5153c76b78446d0d74eb40" notify="4" favorite="no" theme="/manimg/orion/"  css="main.css" logo="logo-ispmgr.png" logolink="" favicon="favicon-ispmgr.ico" localdir="default/"> 
<metadata name="myfunc" type="list" key="name" mgr="ispmgr"> 
<toolbar view="buttontext"> 
<toolgrp name="new"> 
<toolbtn name="new" func="webdomain.edit" type="new" img="t-new" sprite="yes"/> 
<toolbtn name="delete" func="webdomain.delete" type="group" img="t-delete" sprite="yes"/> 
</toolgrp> 
</toolbar> 
 
<coldata> 
<col type="data" name="name" sort="alpha" convert="punycode" sorted="-1"/> 
<col type="data" name="value" sort="alpha" level="reseller+"/> 
</coldata> 
</metadata> 
<messages name="myfunc" checked="6b49a92f5cc5153c76b78446d0d74eb4">
<msg name="title">Test</msg>
<msg name="hint_name"> Название </msg>
<msg name="hint_value">Значение</msg>
<msg name="short_new" added="common">Создать</msg>
<msg name="short_delete" added="common">Удалить</msg>
<msg name="hint_delete" added="common">Удалить</msg>
<msg name="hint_new" added="common">Создать</msg>
<msg name="name" added="common">Имя</msg>
<msg name="value" added="common">Значение</msg>
<msg name="hint_export">Сохранить в CSV</msg>
<msg name="hint_selectall">Выделить все элементы списка</msg>
<msg name="hint_reloadlist">Обновить данные</msg>
<msg name="hint_print">Открыть версию для печати</msg>
<msg name="hint_autoupdate_stop">Отменить автообновление текущего списка</msg>
<msg name="hint_takefavorite">Добавить в избранное меню</msg>
<msg name="hint_takeunfavorite">Убрать из избранного меню</msg>
<msg name="msg_tsetting">Настроить вид таблицы</msg>
</messages>
 
<tparams>
<out>devel</out>
<func>myfunc</func>
</tparams>
<p_sort>name</p_sort>
<p_order>desc</p_order>
<page>test.ru - domain.mary</page>
<elem>
<name>One</name>
<value>Hello</value>
</elem>
<elem>
<name>Two</name>
<value>World!</value>
</elem>
<p_num>1</p_num>
<p_elems>6</p_elems>
</doc>

Чтобы панель перечитала все изменения перезапускаем ее командой - killall core

Результат

Myfunc.png