PFSenseのパッケージの作成:コントロール

画像

前回の記事では、pfSenseのシンプルなGUIパッケージを作成するプロセスについて説明しました。 パッケージには、パッケージファイルのフィールドXMLセクションで説明されている、チェックボックスタイプのコントロールを持つ単一のフィールドが含まれていました。

続行する前に、フィールドセクションの構造について説明する必要があります。 このセクションでは、現在のGUIページのフォームフィールドについて説明します。 各フィールドはフィールドノードで説明され、要素が含まれています。


以下の図は、パッケージ構造のXML要素とGUI要素の対応を示しています。

画像

コントロール


シンプルなpfSenseパッケージのGUIコントロールを検討してください。

CHECKBOX要素
これは通常の「フラグ」であり、ユーザーはyes / noの選択を行うことができます。

<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要素
これは入力要素の一種であり、パッケージのWEB形式でパスワードを入力するために使用されます。 ただし、ここで入力したデータはアスタリスクの形式で表示されます。

  <field> <fielddescr>Password</fielddescr> <fieldname>pkgpass</fieldname> <description>Enter package password.</description> <type>password</type> <size>30</size> </field> 


TEXTAREA要素
複数行のテキストフィールドを表します。 標準のXMLオプションに加えて、フィールド構造には、列と行の要素サイズをそれぞれ指定するcolsrowsパラメーターが説明に含まれています。 ユーザーが入力したデータがどのエンコーディングで保存されるかを示すエンコーディングパラメータもあります。 これは通常、 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要素
これは、 オプションセクションで指定された値のコンボボックスドロップダウンリストです。 multiple修飾子は、通常のコンボボックスリストボックス要素に変換します。 リストボックス要素を使用すると、複数の値を同時に選択できます(Ctrl +左クリック)。 default_valueパラメーターは、 オプションセクションのリストからデフォルト値を設定します。

  <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
これは特別な種類の選択要素です。 このリストには、すべてのメイン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> 


上記のコントロールの説明を1つのXMLファイルに収集すると、次の形式のWebインターフェイスが得られます。
画像

このフォームでアクションを実行するには、イベントハンドラーを指定し、適切なPHPコードを記述する必要があります。 これについては、次の記事で説明します。

記事のXMLファイルのソースコード。
 <?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:このような資料の断片化について同僚に謝罪しますが、長い記事は作りたくありません。

Source: https://habr.com/ru/post/J229151/


All Articles