ほんの数日前にDrupalで作業を開始します。私はDrupalで本当にアマチュアです。Drupalテキストボックスまたはチェックボックスでフォームを作成し、値を保存する方法を知りたいだけです。データベース内のフォーム。
PHPの登録フォームスクリプトのように。
モジュール構造の作成モジュール作成の最初のステップは、モジュールのフォルダーを作成することです。これは_"sites/all/modules/{name of your module}."
_に入れる必要があります。「{モジュールの名前}」と言うときはいつでも、モジュールの名前を挿入する必要があることに注意してください。たとえば、モジュールディレクトリ_"sites/all/modules/form_example."
_を使用します
次に、_"{name of your module}.module"
_および_"{name of your module}.info."
_という2つの空のテキストファイルを作成します。
これらの2つのファイルは、モジュールで必要です。 .infoファイルにはモジュールの機能に関する情報が含まれ、.moduleファイルにはフックを含む実際のコードが含まれます。フックは、アクションが発生したときにDrupalによって呼び出される特別な名前を持つ関数です。たとえば、"form_example_menu()"
は、メニュー情報が収集されるときに呼び出されます。多くの例では、名前が表示されます。 "hook_menu()"
または"my_theme_menu()"
などの場合、これらの場合、_"my_theme"
_および_"hook"
_は、モジュールまたはテーマの名前に置き換える必要があります。
基本モジュールファイルをビルドする
これがform_example.infoファイルに入れるものです。これは、モジュールについてDrupalおよびユーザーに通知します。
_core = "7.x"
description = "An example module used to learn module development and forms creation."
name = "Form Example Module"
_
.infoファイルに追加できるオプションは他にもありますが、上記のオプションを追加する必要があります。
これがform_example.moduleファイルの始まりです。これにより、1つのフィールド(送信ボタン)のみを持つ非常に基本的なフォームが作成されます。
_<?php
function form_example_form($form, &$form_state) {
$form['submit_button'] = array(
'#type' => 'submit',
'#value' => t('Click Here!'),
);
return $form;
}
?>
_
注:PHPコードの最後の「?>」部分は含めず、ファイルの最後に空白行を残してください。これはDrupalです。 =標準。
モジュールには現在、フォームを作成する関数が1つ含まれています。関数は入力$ formと参照&$ form_stateを受け取ることに注意することが重要です。この関数は、Drupalがフォーム_"form_example_form."
_を構築しようとしたときに呼び出されます
フォームを作成するプロセスは、主に2つのステップです。 1つ目は、すべてのフィールドを含む連想配列$ formを作成することです。 2番目のステップは、その$ form変数を返すことです。
フィールドを追加するには、変数$ form [{フィールドの名前}] = array();を設定します。各フィールドは、_"#type"
_や_"#value."
_などのいくつかの属性を持つことができます。これらの属性のほとんどには、先頭に「#」記号が付いています。
上記で追加したフィールドは、「ここをクリック!」というテキストの送信ボタンです。ボタンに。 t()はテキストを出力し、Drupal関数であり、Niceを翻訳で再生します。
これでフォームができたので、form_example_form_validateとform_example_form_submitという2つの関数を追加する必要があります。これらの2つの関数は、Drupalがフォームを検証するとき、およびフォームを送信するときに(検証されていると仮定して)呼び出されるフック関数です。
form_example.module:
_<?php
function form_example_form($form, &$form_state) {
$form['submit_button'] = array(
'#type' => 'submit',
'#value' => t('Click Here!'),
);
return $form;
}
function
form_example_form_validate($form, &$form_state) {
}
function
form_example_form_submit($form, &$form_state) {
}
?>
_
これらの3つの関数は同じ変数を取ることに注意してください。 $ formは元のフォーム情報であり、フォームの元の構造と見なすことができます。 $ form_stateは、送信されたすべての値とその他の情報を保持します。それらの一部は自分で追加できます。これらの2つの関数は、他のフォームと同様に名前を付ける必要がありますが、最後に「検証」と「送信」があります。
フォームを見たい!!!このフォームにメニューリンクを追加します。
_form.example.module
<?php
function form_example_menu() {
$items = array();
$items['examples/form-example'] = array( //this creates a URL that will call this form at "examples/form-example"
'title' => 'Example Form', //page title
'description' => 'A form to mess around with.',
'page callback' => 'drupal_get_form', //this is the function that will be called when the page is accessed. for a form, use drupal_get_form
'page arguments' => array('form_example_form'), //put the name of the form here
'access callback' => TRUE
);
return
$items;
}
function
form_example_form($form, &$form_state) {
$form['submit_button'] = array(
'#type' => 'submit',
'#value' => t('Click Here!'),
);
return $form;
}
function
form_example_form_validate($form, &$form_state) {
}
function
form_example_form_submit($form, &$form_state) {
}
?>
_
モジュールを有効にして、リンクへのアクセスを試みます。おそらくキャッシュをクリアする必要があります。
フォームに機能を追加します。
次に、もう1つのフィールドをフォームに追加します。
_form_example.module
<?php
function form_example_menu() {
$items = array();
$items['examples/form-example'] = array( //this creates a URL that will call this form at "examples/form-example"
'title' => 'Example Form', //page title
'description' => 'A form to mess around with.',
'page callback' => 'drupal_get_form', //this is the function that will be called when the page is accessed. for a form, use drupal_get_form
'page arguments' => array('form_example_form'), //put the name of the form here
'access callback' => TRUE
);
return
$items;
}
function
form_example_form($form, &$form_state) {
$form['price'] = array(
'#type' => 'textfield', //you can find a list of available types in the form api
'#title' => 'What is Your Price?',
'#size' => 10,
'#maxlength' => 10,
'#required' => TRUE, //make this field required
);
$form['submit_button'] = array(
'#type' => 'submit',
'#value' => t('Click Here!'),
),
);
return $form;
}
function
form_example_form_validate($form, &$form_state) {
}
function
form_example_form_submit($form, &$form_state) {
}
?>
_
ここで、新しいテキストフィールドを追加し、必須にしました。最大長も設定しました。フォームを送信しようとすると、Drupalは、ユーザーが必須フィールドに入力しなかった場合、自動的にエラーを生成します。さらに検証を追加します。次のステップ。
検証を追加
_form_example.module
<?php
function form_example_menu() {
$items = array();
$items['examples/form-example'] = array( //this creates a URL that will call this form at "examples/form-example"
'title' => 'Example Form', //page title
'description' => 'A form to mess around with.',
'page callback' => 'drupal_get_form', //this is the function that will be called when the page is accessed. for a form, use drupal_get_form
'page arguments' => array('form_example_form'), //put the name of the form here
'access callback' => TRUE
);
return
$items;
}
function
form_example_form($form, &$form_state) {
$form['price'] = array(
'#type' => 'textfield', //you can find a list of available types in the form api
'#title' => 'What is Your Price?',
'#size' => 10,
'#maxlength' => 10,
'#required' => TRUE, //make this field required
);
$form['submit_button'] = array(
'#type' => 'submit',
'#value' => t('Click Here!'),
),
);
return $form;
}
function
form_example_form_validate($form, &$form_state) {
if (!($form_state['values']['price'] > 0)){
form_set_error('price', t('Price must be a positive number.'));
}
}
function
form_example_form_submit($form, &$form_state) {
}
?>
_
価格が正の数でない限り、フォームが送信されないことがわかります。これを行うには、$ form_state ['values'] [{フィールドの名前}]で、priceの値を確認します。すべてのフィールドに同様の変数があります。
次に、form_set_errorでエラーを設定します。このエラーを追加すると、フォームが検証に合格しなかったことを警告しますDrupal.
フォームが送信されたらどうしますか?この時点から、フォームデータを保存するか、電子メールを送信するか、いくつかの情報を表示します。現時点では、このハウツーの範囲を超えています。
上記の方法を使用していくつかのモジュール「ツール」または「電卓」を構築し、送信機能に計算手順を含めました。変数「$ form_state ['rebuild'] = TRUE;」を設定できます。 Drupalはフォームをクリアしないように、送信関数で使用します。したがって、$ form_stateを編集して、「マークアップ」フィールドタイプを変更して出力することができます。
これはAJAX=でも実行できるため、フォームにページの読み込みなしで計算値が表示されます。これは少し複雑になり、別のハウツーとして追加できます。
結論うまくいけば、これがモジュールの記述やモジュールへのフォームの追加に興味がある人々にとって役立つでしょう。