Пример использования значений полей формы
В статье про плагин “Hello, world!” был приведен пример обработчика плагина, который выводит страницу с текстом. Здесь будет приведен пример того, как добавить редактируемое поле с кнопкой отправки данных и использовать полученные данные в обработчике.
Предположим, вы создали XML-описание плагина и файл обработчика, как рассказано по ссылке выше. В случае, если нужно показывать поле и кнопку только если пользователь еще ничего не ввел. Содержимое файла обработчика /usr/local/mgr5/addon/helloworld.xml должно выглядеть так:
#!/bin/bash
name=$PARAM_name
if [ -z "$name" ]
then
read -r -d '' formfields <<-EOM
<field name="name">
<input name="name" type="text" />
</field>
EOM
read -r -d '' formbuttons <<- EOM
<buttons>
<button type="ok" action="helloworld" name="ok"/>
</buttons>
EOM
else
read -r -d '' formfields <<- EOM
<field name="helloworld_field">
<textdata name="helloworld_message" type="msg" />
</field>
EOM
fi
cat << EOM
<?xml version="1.0" encoding="UTF-8"?>
<doc lang="ru" func="helloworld">
<metadata type="form">
<form>
${formfields}
${formbuttons}
</form>
</metadata>
<messages>
<msg name="title">Плагин Hello, world!</msg>
<msg name="name">Введите ваше имя</msg>
<msg name="helloworld_message">Hello, ${name}!</msg>
<msg name="msg_ok">OK</msg>
</messages>
</doc>
EOM
Если переменная окружения PARAM_name пустая или не существует, то показываем поле ввода и кнопку, в этом случае элемент <form> в XML на выходе обработчика выглядит так:
<form>
<field name="name">
<input name="name" type="text" />
</field>
<buttons>
<button type="ok" action="helloworld" name="ok"/>
</buttons>
</form>
При отправке формы по нажатию на кнопку OK текст, введенный в поле name приходит в обработчик в переменной окружения PARAM_name, и мы показываем введенный текст как часть текстового поля:
<form>
<field name="helloworld_field">
<textdata name="helloworld_message" type="msg" />
</field>
</form>
Текст для текстового поля передается в элементе
<msg name="helloworld_message">
Подробнее о структуре XML, возвращаемого обработчиками, можно прочесть в разделе Структура и возможности плагинов.
Пример на ту же тему на PHP, Python и Node.js можно найти в статье Примеры плагинов на PHP, Python, Node.