Пример плагина. Добавление пункта меню
В данной статье описан пример того, как добавить в левое меню свой раздел и вывести нужные данные при переходе в него.
Описание интерфейса
Чтобы добавить пункт меню, нужно создать 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
XML-файл должен иметь права на чтение и запись для пользователя root.
Как видно из файла, в теге 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|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>
Установите права для обработчика следующими командами:
chmod 750 /usr/local/mgr5/addon/<имя_файла_обработчика>
chown 0:0 /usr/local/mgr5/addon/<имя_файла_обработчика>
Чтобы панель перечитала все изменения перезапускаем ее командой — killall core