Drupal Forms API。 パート1-Drupal 6用

画像

この記事は、最も単純なモジュールの作成にすでに精通しており、FAPI( Drupal Forms API )の原理を「指で」理解したい人を対象としています。 その中で、Drupalフォームプログラミングインターフェイスの基本を分析し、AHAHと呼ばれるDrupal ajaxエンジンを使用して、入力された名前を返す小さなモジュールを作成します。 この単純なフォームのために、FAPIが必要になります。



なぜこのトピックに関する記事ですか? ネットワーク、特にHabréでは、FAPI を使用したモジュールのいくつかあります。 過去の私にとって、フォームがどのように作成されるかを理解することは一定の困難でした。 過去に戻ることはできませんが、同様の困難を経験している人々を助けることができます。



この記事は、Drupalの6.xバージョンに準拠しています。 この記事ではバージョン7を並行して取り上げることを計画しましたが、APIの違いは大きいため、記事のパート2でAPIのバージョン7の同じ機能を説明します。







FAPIフォームを使用する理由



当然、フォームをHTMLの形式で記述し、ページに印刷するか、インクルードファイルとしてモジュールに添付することができます。 ただし、FAPIを使用すると、次の利点が表示されます。

  1. このフォームでは、検証、Drupalのテーマ設定、AHAHシステム(Ajax、Drupalのバージョン7以降)のテーマを使用できます。
  2. フォームは、 t()関数を使用して翻訳インターフェースを実行することで翻訳できます。
  3. フックを介して他のモジュールを編集するためのフォームを提供できます。
  4. そして、重要なことに、フォームはDrupalフォームの一般的なルールに従ってフォーマットされます。これにより、その後のテーマに合わせて「ネイティブ」になります。




最も単純なモジュールを作成する



モジュールにfastcontactという名前を付けましょう。 フォルダ/サイト/すべて/モジュール/ fastcontactを作成します-これがモジュールのルートフォルダになります。 その中に、 fastcontact.infofastcontact.moduleの 2つのファイルを作成します-これで十分です。



.infoで -ファイルを作成します。



; ""   name = Fast Contact ;     description = Test module for learning FAPI ;   version = "6.x-1.0" ;     core = "6.x" ; ""   project = "fastcontact" ;     package = "Other" ;    datestamp = "1294001844"
      
      







これで、フォームを記述するコードに渡すことができます。



FAPIフォームのフォームと要素



各フォームは関数として記述されます。 この関数は、フォーム要素を含む配列を返します。 配列の各要素はフォーム要素に対応し、名前を持ち、この要素の属性の配列を含みます。 要素とその属性の概要表は 、Drupal API Webサイトで確認できます。



1つのテキストボックスを持つ単純なフォームを作成します。



 function fc_form() { $form = array(); //   'name' $form['name'] = array( //   '#type' => 'textfield', //    '#description' => t(' '), //   '#size' => '25', ); //    'submit' $form['submit'] = array( //   Submit (  ) '#type' => 'submit', //    '#value' => 'Submit', //  AHAH (   6) '#ahah' => array( //   click (  JQuery) 'event' => 'click', // ,      'path' => 'fastcontact/js', //      'wrapper' => 'fc-form', //    ( JQuery) 'method' => 'append', //  JQuery    'effect' => 'fade', //   'progress' => array('type' => 'throbber'), ), ); return $form; }
      
      







したがって、テキストボックスとAjax(AHAH)で実行される送信ボタンを含むフォームが作成されます。



リクエスト処理



次に、ANANリクエストを処理するための機能を作成する必要があります。 これを行うには、 ahah要素のpath属性で指定されたパスを作成する必要があります(パス'fastcontact / js'を指定した形式で)。 これはhook_menu()を介して行われます。



Drupalは、「メニュー」に何も入力されない場合でも、 メニューモジュールを使用します 。 ただし、ページのパスは保存されます。 メニュー項目も配列を介して作成されます。



 /** *  hook_menu() */ function fastcontact_menu() { //      $items['fastcontact/js'] = array ( // ,   ""  'page callback' => 'fastcontact_ajax', //      'access arguments' => array('access content'), //        'type' => MENU_CALLBACK, ); return $items; }
      
      







メニュー項目のタイプとしてMENU_CALLBACKを指定しました。 これは、このパスの後にサイトメニューからのリンクが続かないようにするためです(これがリクエストを処理する方法です)。



リクエスト処理関数はフォームの作業に直接関係していないため、改良することなく、AHAHを介して単純に返して、モジュールが機能していることを示します。



 /*   */ function fastcontact_ajax() { //     $_POST //         check_plain() $name=check_plain($_POST['name']); //              (  fc-form) $output = '   <i>'.$name.'</i>.'; //         drupal_json(array('status' => TRUE, 'data' => $output)); }
      
      







フォーム表示



現在、フォームを収集し、レンダリングに必要なすべての操作を行う必要があります。 まず、フォームを表示する関数を作成します。 このために、 drupal_get_form()が使用されます。



 /*   */ function render_fc_form() { //      $out = drupal_get_form('fc_form'); return $out; }
      
      







hook_block()を介してブロックを作成できますが、複雑にならないようにするために、入力フィルターを使用してブロックを作成し、 PHPコードを介してフォームを表示できます。



  echo render_fc_form();
      
      







モジュールの期待される結果



コードが正常に機能する場合、入力フォームの下に「You Enter a name ...」というフレーズが表示されます。ここでは、ページをリロードせずに、省略記号の代わりに入力した名前になります。



All Articles