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

Пример использования значений полей формы

В статье про плагин “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.