私の仕事の大部分は、実際には同じものを何度も何度も構築することであることに気づきました。
これらは、住宅ローンの申し込み、保険など、基本的に複雑な複数ページのフォームです。
そのようなものに一般的/よく使用されるモデルはありますか? どんな言語/テクノロジーが使われているかは気にしません。XML / 言語中立が理想だと考えています。
個人的には、Djangoを使用してフォームを作成しています。私は複雑なマルチステップ フォームdjango.contrib.formtools.FormWizard
を作成しました。ステップは、次のようなステップの Form クラスを作成するために factoryfunction を使用して条件付きで実行されます。
class SomeWizard(FormWizard):
def process_step(self, request, form, step):
if form.is_valid() and step == 0:
#compute step 2
Step2 = second_step_factory(form)
self.form_list[1] = Step2
Wizard オブジェクトをインスタンス化するときに、プレースホルダーを使用してステップを実行します。
def some_form_view(request):
Step1 = first_step_factory(request)
placeholder = second_step_factory()
return SomeWizard([Step1, placeholder])(request)
Django 1.4 では、FormWizard は別の実装に置き換えられました。私はまだそれを見ていません。
言語に依存しない、より宣言的なオプションが必要な場合は、XFormsをご覧ください。ブラウザーのサポートは少し放棄されているようですが、XForms を HTML に変換する XSLTがあります。
http://www.springsource.org/spring-web-flowも使用できます。
Spring Web Flow は、Web アプリケーションの「フロー」を実装できるようにする Spring MVC 拡張機能です。フローは、ビジネス タスクの実行を通じてユーザーをガイドする一連のステップをカプセル化します。複数の HTTP リクエストにまたがり、状態を持ち、トランザクション データを処理し、再利用可能で、動的で長時間実行される可能性があります。
Groovy & Grails ( Webflow Doc )にも完全に統合されています。Groovy は Java のスクリプトのような拡張機能ですが、Grails は Spring や Hibernate などを使用する Web フレームワークです。
ある種のDBを使用してデータを形成していると思います。あなたがしたいことは、フォームページ1にいくつかのデータを入力し、フォームを送信して2ページ目を取得することです。
オプション 1 - PHP Yii フレームワークを使用します。CRUD(フォーム)生成サポートが組み込まれており、単純なフォームを自動的に生成できます。あなたがする必要があるのは、アクションをカスタマイズして、次のフォーム (2 ページ目) にリダイレクトし、最終フォームですべてのデータを保存することです。また、優れた ajax ベースの検証機能も備えています。
アプリを db に接続し、テーブル生成モデルを選択して CRUD を生成するだけです。これまで5〜10分のタスクです。次に、フォームをカスタマイズして検証用のシナリオを定義し、変更をサポートするために既に定義されているアクションを変更する必要があります。サンプル アプリ Yii ブログ
を試すことができます。プロセスを詳細に説明できます。
オプション 2 - JavaScript を使用します。ご要望に応じてシンプルなHTMLフォームを作成します。次に、各ページの送信時に、フォームを検証してフォーム データを JSON/XML オブジェクトに保存する JavaScript (送信ボタンの onClick イベント) を呼び出します。シリアル化することも、セッションで保持することもできます。最終ページの送信時に、JSON/XML データ全体 (最終ページのデータを含む) をフォーム処理スクリプト/アクション タグの URL に送信します。
PFBC (PHP フォーム ビルダー クラス) プロジェクトは、次の目標を念頭に置いて開発されています。
サンプルコードは次のとおりです。
<?php
//PFBC 2.x PHP 5 >= 5.3
session_start();
include($_SERVER["DOCUMENT_ROOT"] . "/PFBC/Form.php");
$form = new PFBC\Form("GettingStarted", 300);
$form->addElement(new PFBC\Element\Textbox("My Textbox:", "MyTextbox"));
$form->addElement(new PFBC\Element\Select("My Select:", "MySelect", array(
"Option #1",
"Option #2",
"Option #3"
)));
$form->addElement(new PFBC\Element\Button);
$form->render();
//PFBC 2.x PHP 5
session_start();
include($_SERVER["DOCUMENT_ROOT"] . "/PFBC/Form.php");
$form = new Form("GettingStarted", 300);
$form->addElement(new Element_Textbox("My Textbox:", "MyTextbox"));
$form->addElement(new Element_Select("My Select:", "MySelect", array(
"Option #1",
"Option #2",
"Option #3"
)));
$form->addElement(new Element_Button);
$form->render();
?>
PHP フォーム ビルダー クラス プロジェクトを参照してください。お役に立てれば... :)
さて、どの言語が使用されているか気にせず、RORの学習に興味がある場合は、ここにまともな複雑なフォームのチュートリアルがありますが、これを機能させるにはフレームワークにある程度精通している必要があります
おそらく、この回答は、より単純なjquery指向のアプローチを見つけるのに役立ちますが、少し古いかもしれません
こちらの jQuery マルチステップ フォーム チュートリアルもご覧ください。
そこにも馬鹿に強いプラグインがあるに違いない
私は言語中立になろうとはしません。この種のことを非常にうまく行うCFMLやPHPのような言語に注目してください。例えば。
<input type="radio" name="type" value='mortgage' onmouseup='updateForm(this)'> Mortgage
<input type="radio" name="type" value='loan' onmouseup='updateForm(this)'> Loan
<cfif form.type eq 'loan'>
<input name="income" type="text">
</cfif>
非常に単純な例です。ログインの詳細、データベースの値、以前のフォームなどに基づいたロジックを使用することもできます。CFMLには、動的フォームの複雑な詳細の一部を処理できる高度なフォーム タグ ( cfinputなど) も用意されています。