
この記事は、最も単純なモジュールの作成にすでに精通しており、FAPI(
Drupal Forms API )の原理を「指で」理解したい人を対象としています。 その中で、Drupalフォームプログラミングインターフェイスの基本を分析し、AHAHと呼ばれるDrupal ajaxエンジンを使用して、入力された名前を返す小さなモジュールを作成します。 この単純なフォームのために、FAPIが必要になります。
なぜこのトピックに関する記事ですか? ネットワーク、特にHabréでは、FAPI
を使用したモジュールの
例が
いくつかあります。 過去の私にとって、フォームがどのように作成されるかを理解することは一定の困難でした。 過去に戻ることはできませんが、同様の困難を経験している人々を助けることができます。
この記事は、Drupalの6.xバージョンに準拠しています。 この記事ではバージョン7を並行して取り上げることを計画しましたが、APIの違いは大きいため、記事のパート2でAPIのバージョン7の同じ機能を説明します。
FAPIフォームを使用する理由
当然、フォームをHTMLの形式で記述し、ページに印刷するか、インクルードファイルとしてモジュールに添付することができます。 ただし、FAPIを使用すると、次の利点が表示されます。
- このフォームでは、検証、Drupalのテーマ設定、AHAHシステム(Ajax、Drupalのバージョン7以降)のテーマを使用できます。
- フォームは、 t()関数を使用して翻訳インターフェースを実行することで翻訳できます。
- フックを介して他のモジュールを編集するためのフォームを提供できます。
- そして、重要なことに、フォームはDrupalフォームの一般的なルールに従ってフォーマットされます。これにより、その後のテーマに合わせて「ネイティブ」になります。
最も単純なモジュールを作成する
モジュールに
fastcontactという名前を付けましょう。 フォルダ
/サイト/すべて/モジュール/ fastcontactを作成します-これがモジュールのルートフォルダになります。 その中に、
fastcontact.infoと
fastcontact.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();
したがって、テキストボックスとAjax(AHAH)で実行される
送信ボタンを含むフォームが作成されます。
リクエスト処理
次に、ANANリクエストを処理するための機能を作成する必要があります。 これを行うには、
ahah要素の
path属性で指定された
パスを作成する必要があります(パス
'fastcontact / js'を指定した形式で)。 これは
hook_menu()を介して行われます。
Drupalは、「メニュー」に何も入力されない場合でも、
メニューモジュールを使用し
ます 。 ただし、ページのパスは保存されます。 メニュー項目も配列を介して作成されます。
function fastcontact_menu() {
メニュー項目のタイプとして
MENU_CALLBACKを指定しました。
これは、このパスの後にサイトメニューからのリンクが続かないようにするためです(これがリクエストを処理する方法です)。
リクエスト処理関数はフォームの作業に直接関係していないため、改良することなく、AHAHを介して単純に返して、モジュールが機能していることを示します。
function fastcontact_ajax() {
フォーム表示
現在、フォームを収集し、レンダリングに必要なすべての操作を行う必要があります。 まず、フォームを表示する関数を作成します。 このために、
drupal_get_form()が使用されます。
function render_fc_form() {
hook_block()を介してブロックを作成できますが、複雑にならないようにするために、入力フィルターを使用してブロックを作成し、
PHPコードを介してフォームを表示できます。
echo render_fc_form();
モジュールの期待される結果
コードが正常に機能する場合、入力フォームの下に「You Enter a name ...」というフレーズが表示されます。ここでは、ページをリロードせずに、省略記号の代わりに入力した名前になります。