Пример плагина. Работа с шаблонизатором
Пример плагина добавления новых полей на форму редактирования сайта и передачи значений в шаблонизатор. Для примера реализуем управление параметром 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Перезапуск произойдет автоматически.