![image](http://habrastorage.org/files/575/235/4ec/5752354ec290497ebce5601aa3849d5a.png)
В предыдущей статье был рассмотрен процесс создания простого GUI пакета для pfSense. Пакет содержал одно единственное поле с элементом управления типа checkbox, описанное в разделе fields XML файла пакета.
Перед продолжением необходимо дать некоторые пояснения по структуре раздела fields. В этом разделе содержится описание полей формы текущей страницы GUI. Каждое поле описывается в узле field и содержит элементы:
- fielddescr — название поля, выводится в левой части формы перед элементом управления;
- fieldname — имя поля, под которым оно будет доступно в системе при обработке введенных данных;
- description — комментарий, описывающий данное поле, выводится под элементом управления;
- type — тип элемента управления, используемого в данном поле.
На рисунке ниже показано соответствие элементов XML структуры пакета и элементов графического интерфейса.
Элементы управления
Рассмотрим простые элементы управления графического интерфейса пакетов pfSense:
- сheckbox
- input
- password
- textarea
- select
- interfaces_selection
Элемент CHECKBOX
Представляет собой обычный «флажок», позволяющий пользователю возможность сделать выбор да/нет.
<field> <fielddescr>Enable</fielddescr> <fieldname>enable</fieldname> <description>Check this for enable package.</description> <type>checkbox</type> </field>
Элемент INPUT
Представляет собой простое текстовое поле для ввода однострочной текстовой информации. Параметр size позволяет задать ширину окна этого элемента.
<field> <fielddescr>Login</fielddescr> <fieldname>pkglogin</fieldname> <description>Enter package login.</description> <type>input</type> <size>30</size> </field>
Элемент PASSWORD
Является разновидностью элемента input и служит для ввода пароля в WEB форме пакета. Но введенные данные здесь отображаются в виде звёздочек.
<field> <fielddescr>Password</fielddescr> <fieldname>pkgpass</fieldname> <description>Enter package password.</description> <type>password</type> <size>30</size> </field>
Элемент TEXTAREA
Представляет собой многострочное текстовое поле. Кроме стандартных опций XML стуктуры поля содержит в описании параметры cols и rows, задающие размеры элемента в колоноках и строках соответственно. Имеется также параметр encoding, указывающий в какой кодировке сохранять введенные пользователем данные. Обычно это кодировка Base64.
<field> <fielddescr>Comments</fielddescr> <fieldname>pkgcomments</fieldname> <description> Enter you coments here. </description> <type>textarea</type> <cols>60</cols> <rows>3</rows> <encoding>base64</encoding> </field>
Элемент SELECT
Представляет собой выпадающий список значений в виде combo box, задаваемых в секции options. Модификатор multiple превращает обычный combo box в элемент list box, позволяющий выбирать несколько значений одновременно (нажатием Control + Лев. клик). Параметр default_value задает значение по умолчанию из списка в секции options.
<field> <fielddescr>Age</fielddescr> <fieldname>pkgage</fieldname> <description>Choose your age.</description> <type>select</type> <default_value>adl</default_value> <options> <option><value>chd</value><name>children</name></option> <option><value>tng</value><name>teenager</name></option> <option><value>adl</value><name>adult</name></option> </options> <multiple/> </field>
Элемент INTERFACES_SELECTION
Является специальной разновидностью элемента select. В этот список выводятся все основные сетевые интерфейсы pfSense. Также как и в элементе select здесь доступны дополнительные опции multiple и default_value.
<field> <fielddescr>Interface</fielddescr> <fieldname>pkginterface</fieldname> <description> Select interface(s) for using in the package. Use 'Ctrl' + L_click for multiple selection. </description> <type>interfaces_selection</type> <default_value>lan</default_value> <multiple/> </field>
Собрав приведенные выше описания элементов управления в один XML файл получим следующую форму Web интерфейса:
Для того, чтобы эта форма выполняла какие-либо действия, необходимо задать обработчики событий и написать соответствующий PHP код. Об этом речь пойдет в следующей статье.
<?xml version="1.0" encoding="utf-8" ?> <packagegui> <name>mypkg</name> <title>My First Package</title> <category>Test</category> <version>0.1</version> <include_file>/usr/local/pkg/mypkg.inc</include_file> <tabs> <tab> <text>My Package</text> <url>/pkg_edit.php?xml=mypkg.xml</url> <active/> </tab> </tabs> <fields> <field> <fielddescr>Enable</fielddescr> <fieldname>enable</fieldname> <description>Check this for enable package.</description> <type>checkbox</type> </field> <field> <fielddescr>Interface</fielddescr> <fieldname>pkginterface</fieldname> <description>Select interface(s) for using in the package. Use 'Ctrl' + L_click for multiple selection.</description> <type>interfaces_selection</type> <default_value>lan</default_value> <required/> <multiple/> </field> <field> <fielddescr>Login</fielddescr> <fieldname>pkglogin</fieldname> <description>Enter package login.</description> <type>input</type> <size>30</size> </field> <field> <fielddescr>Password</fielddescr> <fieldname>pkgpass</fieldname> <description>Enter package password.</description> <type>password</type> <size>30</size> </field> <field> <fielddescr>Comments</fielddescr> <fieldname>pkgcomments</fieldname> <description> Enter you coments here. </description> <type>textarea</type> <cols>60</cols> <rows>3</rows> <encoding>base64</encoding> </field> <field> <fielddescr>Age</fielddescr> <fieldname>pkgage</fieldname> <description>Choose your age.</description> <type>select</type> <default_value>adl</default_value> <options> <option><value>chd</value><name>children</name></option> <option><value>tng</value><name>teenager</name></option> <option><value>adl</value><name>adult</name></option> </options> </field> </fields> <custom_php_command_before_form/> <custom_php_validation_command/> <custom_php_resync_config_command/> <custom_php_install_command/> <custom_php_deinstall_command/> </packagegui>
PS: Прошу прощения у коллег за такое дробление материала, но не хочется делать длинные статьи.
ссылка на оригинал статьи http://habrahabr.ru/post/229151/
Добавить комментарий