Руководство для разработчиков

/
/
Первые шаги: плагин «Hello, world!»

Первые шаги: плагин «Hello, world!»

В этой статье описан процесс создания плагина в ispmanager с обработчиком на bash-скрипте. В результате будет создан новый пункт в меню со страницей «Hello, world!».

Что потребуется

  • Редактировать и загружать файлы. Для этого используйте менеджер файлов или подключитесь к серверу по SSH или FTP.
  • Выполнять действия с правами суперадминистратора (root).

XML-описание плагина

Код любого плагина ispmanager обязательно включает XML-файл, описывающий добавляемые плагином изменения. 

Чтобы ispmanager увидел этот плагин, файл с его XML-описанием должен:

  • находиться в папке /usr/local/mgr5/etc/xml;
  • имя файла должно быть в формате  ispmgr_mod_*.xml.

Для создания плагина:

1. Перейдите в папку /usr/local/mgr5/etc/xml.

2. Создайте в ней файл ispmgr_mod_helloworld.xml.

3. Скопируйте XML-код ниже и вставьте его в созданный файл:

<?xml version="1.0" encoding="UTF-8"?>
<!-- тэг mgrdata всегда должен быть на верхнем уровне любого плагина -->
<mgrdata>
    <!-- секция, добавляющая группы и пункты в меню -->
    <mainmenu level="30">
        <!-- в современных версиях ispmanager главное меню описывается 
             в тэге modernmenu внутри тэга mainmenu -->
        <modernmenu>
            <!-- в ispmanager двухуровневое меню - группы, внутри которых 
                 пункты - ссылки на страницы, и для тех, и для других 
                 используется тэг node; если мы хотим создать 
                 пункт меню без группы, нужно на уровне группы добавить
                 атрибут type="noname" -->
            <node name="helloworld_group" type="noname">
                <!-- тэг node второго уровня задает конкретный пункт меню,
                     атрибут name используется как func для страницы при
                     задании обработчика, а также для задания строки 
                     локализации в тэге msg ниже -->
                <node name="helloworld" />
            </node>
        </modernmenu>
    </mainmenu>
    
    <!-- тэг handler задает обработчик, имя файла обработчика - 
         в атрибуте name -->
    <handler name="helloworld.sh" type="xml">
        <!-- тэг func внутри тэга handler определяет, какие вызовы
             (например, страницы) будут обрабатываться данным обработчиком -->
        <func name="helloworld" />
    </handler>
    
    <!-- тэг lang задает секцию сообщений локализации для одного языка,
         внутри него могут содержаться сообщения локализации для многих страниц -->
    <lang name="ru">
        <!-- тэг messages задает секцию сообщений локализации для одного func 
             или, в данном случае - для навигационных элементов, общих для всех
             страниц (name="desktop") -->
        <messages name="desktop">
            <!-- тэг msg задает строку локализации с единственным 
                 атрибутом-идентификатором name. В данном случае префикс
                 modernmenu_ указывает, что мы задаем локализацию для
                 пункта меню с именем, указанным после префикса -->
            <msg name="modernmenu_helloworld">Плагин Hello, World</msg>
        </messages>
    </lang>
</mgrdata>

В XML-коде выше приводится объяснение того, что происходит на каждой строчке.

Дополнительные понятия, с которыми предстоит постоянно сталкиваться в процессе разработки плагинов:

  • func, «функция» — идентификатор какой-то части функциональности ispmanager (встроенной или добавленной в плагинах), использующийся в API ispmanager. К каждой странице ispmanager обязательно привязана какая-то функция, предоставляющая данные для отображения страницы. В некоторых случаях функция может обслуживать несколько страниц или, наоборот, функционал одной страницы может задействовать несколько разных функций. Идентификатор функции связывает воедино разные части функционала. В приведенном XML-описании плагина он указывается для пункта меню (<node name="helloworld" />) и связывает пункт меню и обработчик, который должен вернуть данные для отображения страницы при выборе пункта меню;
  • строки локализации — текст для элементов UI задается отдельно от самих элементов (в случае выше — текст пункта меню задается отдельно от самого пункта меню). Чтобы задать язык, используется тэг <lang>, внутри него может быть один или несколько тэгов <messages>, а каждая отдельная строка задается тэгом <msg>.

В приведенном XML-описании плагина есть ссылка на файл обработчика, это будет второй файл, который нужно создать для вашего плагина.

Обработчик

Файлы обработчиков плагинов должны удовлетворять следующим требованиям:

  • находиться в папке /usr/local/mgr5/addon;
  • имя файла может быть любым, но файл должен быть исполняемым для пользователя и группы root.

Для создания обработчика:

1. Перейдите в папку /usr/local/mgr5/addon.

2. Создайте в ней файл helloworld.sh (имя файла, которое вы задали в атрибуте name тэга <handler> в XML-описании плагина).

3. Присвойте файлу права 750 с помощью кнопки Атрибуты в менеджере файлов или с помощью команды в консоли:

chmod 750 /usr/local/mgr5/addon/helloworld.sh

4. Скопируйте код Bash-скрипта обработчика ниже и вставьте его в созданный файл:

#!/bin/bash
cat << EOM
<?xml version="1.0" encoding="UTF-8"?>
<doc lang="ru" func="helloworld">
    <metadata type="form">
        <form>
            <field name="helloworld_field">
                <textdata name="helloworld_message" type="msg" /> 
            </field>
        </form>
    </metadata>
    <messages>
        <msg name="title">Плагин Hello, world!</msg>
        <msg name="helloworld_message">Hello, world!</msg>
    </messages>
</doc>
EOM

Активация плагина

1. Перезагрузите панель ispmanager, выполнив из терминала команду (можно воспользоваться Администрирование → Shell-клиент в ispmanager):

pkill core

2. Обновите страницу с панелью ispmanager.

Результат

Снизу меню появился новый пункт «‎Плагин Hello, World!».

Если перейти по этой ссылке, откроется страница вашего плагина:

Заключение

Созданный обработчик выводит статичный XML-код, который помещен между EOM на второй строке и EOM на последней. Значение func из XML-описания плагина используется здесь в атрибуте func тэга <doc>.

Также здесь присутствуют знакомые по XML-описанию плагина тэги <messages> и <msg>, задающие строки локализации. В целом этот XML описывает страницу с типом «форма», в которой есть заголовок и единственное поле (<field>) со статичным текстом (<textdata>). 

Важные понятия разработки плагинов
  • XML-описание;
  • обработчик;
  • функции (func);
  • строки локализации.

Более подробно устройство и возможности плагинов разбираются в разделе Структура и возможности плагинов.