Добавление пункта меню
В данной статье описан пример того, как добавить в левое меню свой раздел и вывести нужные данные при переходе в него.
Описание интерфейса
Для добавления раздела меню:
- создайте xml файл ispmgr_mod_menu.xml
 
Путь должен быть обязательно /usr/local/mgr5/etc/xml/ и имя обязательно ispmgr_mod_<произвольное наименование>.xml
XML-файл должен иметь права на чтение и запись для пользователя root.
touch /usr/local/mgr5/etc/xml/ispmgr_mod_menu.xml- добавьте в этот файл следующее описание:
 
<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
        <mainmenu level="admin+">
                <modernmenu>
                        <node name="my_group">
                                <node name="myfunc" favorite="yes" />
                        </node>
                </modernmenu>
        </mainmenu>
        <handler name="myaddon.sh" type="xml">
                <func name="myfunc" />
        </handler>
        <lang name="ru">
                <messages name="desktop">
                        <msg name="modernmenu_my_group">New menu item</msg>
                        <msg name="modernmenu_myfunc">Test</msg>
                </messages>
        </lang>
</mgrdata>
Как видно из файла, в теге mainmenu указывается на каком уровне будет виден раздел. В примере — admin+ — уровень суперадминистратора.
node_name='administrator' - новый пункт меню будет добавлен в раздел 'Администраторы';
node_name='my_group' - новый пункт меню будет добавлен в раздел, созданный пользователем;
node_name ='myfunc' - объявляем свою функцию. Чтобы панель начала отображать наш пункт меню необходимо, чтобы в панели была функция с соответствующим названием. 
Атрибут favorite="yes" на элементах <node> второго уровня указывает на то, что пункт меню должен быть сразу показан в левом меню; если favorite="yes" не задан, пункт меню появится на странице "Все разделы", откуда пользователь сможет добавить его в левое меню.  
Добавление собственной функции
- Добавляем обработчик функции myaddon (уже добавили в файле ispmanager_mod_menu.xml):
 
<handler name="myaddon.sh" type="xml"> 
<func name="myfunc" /> 
</handler>
- Аддон должен быть расположен в директории /usr/local/mgr5/addon/
 
- Создайте в директории /usr/local/mgr5/addon файл myaddon.xml:
 
touch myaddon.xmlДобавьте в файл плагин (то, что будет отображаться на странице созданного раздела, не забываем указывать имя добавленной нами функции func="myfunc".
<?xml version="1.0" encoding="UTF-8"?>
<doc lang="ru" func="myfunc" binary="/ispmgr">
        <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"/>ls 
                        </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>
- Создаем в папке addon файл myaddon.sh (добавляем обработчик)
 
touch myaddon.sh- Установите права для обработчика следующими командами:
 
chmod 750 /usr/local/mgr5/addon/<имя_файла_обработчика>
chown 0:0 /usr/local/mgr5/addon/<имя_файла_обработчика>- Добавляем две строчки в файл myaddon.sh
 
#!/bin/bash 
cat /usr/local/mgr5/addon/myaddon.xml
Чтобы панель перечитала все изменения перезапускаем ее командой  pkill -9 core
При нажатии на раздел Test (такое название ему присвоено в блоке lang), будет вызываться myaddon.sh, который должен вернуть панели полный xml с необходимыми данными.
Результат

