Для разработчиков

Пример плагина. Работа с шаблонизатором

Пример плагина добавления новых полей на форму редактирования сайта и передачи значений в шаблонизатор. Для примера реализуем управление параметром nginx limit_rate. На форме редактирования сайта во вкладке "Оптимизация и защита от DDoS" добавим поле "Ограничение скорости".

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

Расположение XML файлов строго определено: они должны находиться в директории /usr/local/mgr5/etc/xml/. Имя каждого файла должно начинаться с префикса ispmgr_mod_ и завершаться конкретным именем плагина, например ispmgr_mod_nginx_rate_limit.xml.

Обратите внимание!

XML-файл должен иметь права на чтение и запись для пользователя root.

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

<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
 <metadata name="site.edit" type="form">
    <form>
      <page name="optimization">
        <field name="site_nginx_rate_limit">
          <input type="text" name="site_nginx_rate_limit" check="int" checkargs="1,100000000000" />
        </field>
      </page>
    </form>
  </metadata>
  <metadata name="webdomain.edit" type="form">
    <form>
      <page name="optimization">
        <field name="nginx_rate_limit">
          <input type="text" name="nginx_rate_limit" check="int" checkargs="1,100000000000" />
        </field>
      </page>
    </form>
  </metadata>
  <lang name="ru">
    <messages name="site.edit">
      <msg name="site_nginx_rate_limit">Ограничение скорости</msg>
      <msg name="hint_site_nginx_rate_limit">Ограничивает скорость передачи ответа клиенту</msg>
    </messages>
  </lang>
  <lang name="en">
    <messages name="site.edit">
      <msg name="site_nginx_rate_limit">Rate limit</msg>
      <msg name="hint_site_nginx_rate_limit">Limits the rate of response transmission to a client</msg>
    </messages>
  </lang>
</mgrdata>

Информация в двух блоках метаданных описывает процедуру добавления нового поля на форму редактирования сайта. Эта форма имеет атрибут type="form" и идентификатор name="webdomain.edit". Поле будет добавлено на вкладку с именем "Оптимизация и защита от DDoS" page name="optimization". Новое поле будет иметь идентификатор name="nginx_rate_limit" и тип "строковое поле" type="text". Валидация данных будет проверять значение как целое число из диапазона 1,100000000000 check="int" checkargs="1,100000000000"

Обратите внимание!

В блоке <metadata name="site.edit" type="form"> для названия поля необходимо добавить префикс "site_"

Пример: <field name="site_nginx_rate_limit">

Без данного префикса плагин работать не будет!  

Блок lang определяет текстовые описания и подсказки на русском и английском языках для удобства пользователя.

После добавления новых параметров через XML необходимо перезапустить панель управления с помощью следующей команды:

/usr/local/mgr5/sbin/mgrctl -m ispmgr exit

Добавление дополнительных полей таблицы

Для того чтобы данные с формы сохранялись в базе данных панели, необходимо добавить в таблицу webdomain новый столбец. Это можно сделать с помощью встроенного механизма. Создаем файл /usr/local/mgr5/etc/sql/webdomain.addon/nginx_rate_limit с следующим содержимым:

type=int
access_read=user+
access_write=user+

Шаблоны

Редактирование файла шаблонизатора определяет директивы, которые будут включены в конфигурационный файл Nginx.

Скопируете /usr/local/mgr5/etc/templates/default/nginx-vhosts.template и /usr/local/mgr5/etc/templates/default/nginx-vhosts-ssl.template в директорию /usr/local/mgr5/etc/templates/.

В /usr/local/mgr5/etc/templates/default/nginx-vhosts.template добавьте: 

{% if $NGINX_RATE_LIMIT != "" %}
    limit_rate [% $NGINX_RATE_LIMIT %];
{% endif %}

И измените путь к SSL шаблону:

{% import etc/templates/nginx-vhosts-ssl.template %}

В /usr/local/mgr5/etc/templates/nginx-vhosts-ssl.template добавьте 

{% if $NGINX_RATE_LIMIT != "" %}
    limit_rate [% $NGINX_RATE_LIMIT %];
{% endif %}
Обратите внимание!

Шаблоны периодически меняются, когда в панель управления добавляются новые функции. Когда вы создаете свои кастомные шаблоны (как в данном примере), то вам необходимо самостоятельно актуализировать их в соответствии с встроенными шаблонами.

Сбросьте кэш БД и перезапустите ispmanager:

rm -rf /usr/local/mgr5/var/.db.cache*
/usr/local/mgr5/sbin/mgrctl -m ispmgr exit

Полный код плагина можно взять с github. Для его установки достаточно выполнить:

git clone https://github.com/ispmanager-official/plugin-examples.git
cd plugin-examples
./install.sh template-nginx-rate-limit

Перезапуск произойдет автоматически.