Drupalで確認画面付きのフォームを作る
アンケートや問い合わせなど様々なウェブフォームがネットにはあふれていて、それらをDrupalで作成するのも簡単に出来ます。しかしながら、海外のサイトにあるウェブフォームは、日本ではおなじみの確認画面がまずありません。思想の違いなのでしょうが、海外産のCMSを導入しようとする際に壁となる項目のひとつです。おなじく海外発のCMSであるDrupalにおいても、フォームは簡単に作成できても、確認画面はちょっとしたコツが必要になります。
確認画面を表示するために、パスに引数を追加したり、セッションに書き込んだり、といった方法もあるのですが、今回はマルチページフォームを使って実現する方法を自分用にメモしておきます。
ちなみにこのマルチページフォームは「Pro Drupal Development」の「CHAPTER 10 : THE FORM API」を参考にしており、確認画面関連以外はほぼそのままなので、より詳しくは本書を参照していただくか、もしくは今月末に出版される「Drupal 実践プログラミング徹底入門」を参考にしてください。
適当なモジュールを作成しているとして、メニューなどの設定もすんでいるとします。
まずは入力画面と確認画面を定義している部分です。
function sample_module_form(&$form_state) {
$step = isset($form_state['values']) ? (int)$form_state['storage']['step'] : 0;
// Store next step.
$form_state['storage']['step'] = $step + 1;
switch ($step) {
case 1:
/**** 入力画面を設定 ****/
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Confirm'),
);
break;
case 2:
/**** 確認画面を設定 ****/
$form['return'] = array(
'#type' => 'submit',
'#value' => t('Return'),
'#name' => 'return',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Send'),
);
break;
}
return $form;
}
確認画面を定義している個所で、'#type'='submit'のボタンを二つ配置しているのがポイントです。
次にフォームが送信された時の処理を定義している部分です。
function sample_module_form_submit($form, &$form_state) {
// '#name' = 'return' のボタンが押されたときは入力画面に戻る
if ($form_state['clicked_button']['#name'] == 'return') {
$form_state['storage']['step'] = 1;
return;
}
// 入力画面から確認画面へ移る
if ($form_state['storage']['step'] < 3) {
return; //
}
/**** 確認画面で送信ボタンが押された時の処理 ****/
// 完了画面に移動
$form_state['redirect'] = 'sample/form/complete';
}
とまあ、何のことだかさっぱり分らないと思いますが、もともと自分用のメモでして、でも上記の書籍を読んでいただければすぐに理解できると思いますよ、っと一応宣伝しておく。
| 固定リンク
「Drupal」カテゴリの記事
- さくらレンタルサーバーにDrupal7をインストールできない ...(2014.04.18)
- Drupal Documentation の The files directory を翻訳しました(2011.03.09)
- Drupal Documentation の Clean URLs を翻訳しました(2011.03.08)
- Drupal Documentation の翻訳を始めました(2011.03.03)
- コンテンツを保存すると同時に Views のキャッシュをクリアする方法(2010.04.23)
この記事へのコメントは終了しました。
コメント
初めて投稿します。
勉強させて頂いております。
モジュールの説明など詳しく書かれていているので分かりやすいです。ありがとうございます。
何が貢献できるか分かりませんが、
ご存知かもしれませんが、Node Templateと言うモジュール、作成したノードを専用テンプレート化できるので便利良かったです。
また遊びにきます。
投稿: Shin | 2009/06/04 16:41
PineRayです。
コメントありがとうございます。
分りやすいなんてとんでもない
プアなスキルのくせに書き散らかしております。
間違うことも多いのですが、そこは大目に見ていただけるとありがたいです。
Node Templateは見たところ便利そうですね。
更新が止まっているのとD6版が無いことから、これから採用するにはちょっと二の足を踏みますが、構造を解析して参考にするのに良い感じです。
ともあれ、今後ともどうぞよろしくお願いします。
投稿: PineRay | 2009/06/04 18:49