Forms Steps
エンティティフォームモードを使用したマルチステップフォームワークフローを作成するためのUIを提供し、Drupalで迅速かつ設定可能なマルチステップフォームを実現します。
forms_steps
インストール
composer require 'drupal/forms_steps:8.x-1.7'
概要
Forms Stepsは、サイト管理者がコードを書かずにマルチステップフォームワークフローを作成できる強力なモジュールです。Drupalのエンティティフォームモードを活用して、エンティティの作成・編集を複数の連続したページに分割します。
このモジュールは「Forms Steps」と呼ばれる設定エンティティを導入し、完全なワークフローを定義します。これには、ステップ(それぞれがエンティティタイプ、バンドル、フォームモードを指定)、視覚的なプログレスバー表示用のプログレスステップ、完了後の動作を定義するリダイレクトポリシーが含まれます。
各ワークフローインスタンスは一意のUUID(instance_id)で追跡され、ユーザーはデータの一貫性を保ちながらステップ間を移動できます。モジュールは各ステップURLの動的ルートを自動的に作成し、ページ上の任意の場所に配置できるプログレスバーブロックを提供します。
Forms Stepsはまた、ユーザーがステップ間を移動する際にイベントを発火させ、開発者は登録後の自動ユーザーログインやデータ検証などのカスタムロジックを実装できます。
Features
- コーディング不要で直感的な管理UIからマルチステップフォームワークフローを作成
- あらゆるフィールド可能なエンティティタイプ(Node、User、Taxonomy、カスタムエンティティ)をサポート
- 既存のDrupalフォームモードを活用して各ステップで異なるフィールドを表示
- ワークフローの継続性のためのUUIDベースのインスタンス追跡を備えた動的ルート生成
- カスタマイズ可能なステップリンクと表示制御を備えた設定可能なプログレスバーブロック
- ステップごとにカスタマイズ可能なボタンラベル(送信、キャンセル、削除、前へ)
- ワークフロー内での後方ナビゲーション用の「前へ」ボタンサポート
- ワークフロー完了後の複数のリダイレクトポリシー(内部パス、外部URL、ルート、エンティティ表示)
- ステップ遷移時のカスタムロジック用のStepChangeEvent
- 既存エンティティをワークフローインスタンスにインポートするためのDrushコマンド
- データベースバックエンドの永続化によるワークフローインスタンス管理
- ソースエンティティ削除時のワークフローインスタンスの自動クリーンアップ
- セキュリティを考慮した複数ステップにわたるユーザーアカウント作成のサポート
- 設定時のステップページでの管理テーマサポート
Use Cases
マルチステップNode作成
多くのフィールドを持つコンテンツタイプを作成し、複数のページに分割します。例えば、求人応募フォームでは、ステップ1で個人情報、ステップ2で職歴、ステップ3で学歴、ステップ4でドキュメントアップロードを行えます。各ステップはフォームモードを使用して関連するフィールドのみを表示します。
ユーザー登録ウィザード
ユーザー登録を複数のステップに分割: 基本アカウント情報、プロフィール詳細、設定。StepChangeEventを使用して最初のステップ後にユーザーを自動ログインさせ、後続のステップでプロフィールを更新できるようにします。最終ステップでユーザーのプロフィールページにリダイレクトするよう設定します。
注文/チェックアウトプロセス
カスタムコマースソリューション用のマルチステップチェックアウトフローを作成します。ステップ1でカート商品を収集、ステップ2で配送情報を処理、ステップ3で支払い詳細を管理、ステップ4で確認を表示します。プログレスバーブロックはユーザーがプロセス内での位置を追跡するのに役立ちます。
アンケートまたはクイズアプリケーション
複数ページの質問を持つ複雑なアンケートを構築します。各ページ(ステップ)は異なるフィールドや質問グループを表示できます。プログレスステップはユーザーにアンケートの進行状況を示し、オプションで前のセクションに戻るリンクを提供します。
オンボーディングワークフロー
登録後の新規ユーザーをセットアッププロセスを通じてガイドします。各ステップは異なる情報を収集: プロフィール設定、通知設定、チュートリアル完了。リダイレクトポリシーを使用して、すべてのステップ完了後にユーザーをダッシュボードに送ります。
既存データを使用したコンテンツインポート
Drushコマンドを使用して既存コンテンツをワークフローにインポートします。例えば、既存のNodeを特定のワークフローステップにアタッチすることで、レガシーコンテンツを新しいマルチステップ編集ワークフローに移行します。
Tips
- ワークフローの各部分に関連するフィールドのみを表示する専用のフォームモードを各ステップ用に作成する
- 「前へ」ボタン機能を使用して、ユーザーが前のステップに戻って確認・編集できるようにする
- 最終ステップ後に完成したコンテンツをユーザーに表示するには、リダイレクトポリシーを「現在のエンティティ」に設定する
- プログレスバーブロックを目立つ場所に配置し、CSSクラス(previous-step、active、next-step)でスタイルを設定する
- ユーザー登録ワークフローでは、常に最初のステップでユーザーを作成し、後続のステップでプロフィールを更新する
- StepChangeEventを使用してステップ間のカスタム検証、通知、データ操作を実装する
- 設定管理を使用してForms Steps設定をエクスポートし、環境間でワークフローを同期する
- 「関連するステップが保存されている場合のみリンクを表示」を有効にして、ユーザーがプログレスバーリンク経由でステップをスキップするのを防ぐ
- 新しいエンティティと既存のエンティティ(Drushコマンド経由)の両方でワークフローをテストし、適切な動作を確認する
Technical Details
Admin Pages 7
/admin/config/workflow/forms_steps
設定されたすべてのForms Stepsワークフローを一覧表示するメイン管理ページ。ここからワークフローの追加、編集、削除、およびワークフローインスタンスの表示ができます。
/admin/config/workflow/forms_steps/add
ラベル、マシン名、オプションの説明を入力して新しいForms Stepsワークフローを作成します。
/admin/config/workflow/forms_steps/edit/{forms_steps}
ステップ、プログレスバー、リダイレクト設定を含むForms Stepsワークフローのすべての側面を設定します。
/admin/config/workflow/forms_steps/{forms_steps}/add_step
エンティティタイプ、バンドル、フォームモード、URL、ボタン設定を構成してForms Stepsワークフローに新しいステップを追加します。
/admin/config/workflow/forms_steps/{forms_steps}/add_progress_step
ワークフローの進行状況を示す視覚的なプログレスバー用のプログレスステップを追加します。
/admin/config/workflow/forms_steps/workflows/list
作成されたすべてのワークフローインスタンスを表示し、各マルチステップフォームセッションのワークフロー追跡データを表示します。
/admin/config/workflow/forms_steps/settings
Forms Stepsモジュールのグローバル設定。
権限 2
Hooks 6
hook_form_alter
Forms StepsがForms Stepsルート上のフォームをインターセプトし、ステップナビゲーション処理を追加するために内部的に使用されます。
hook_entity_type_alter
Forms Stepsワークフローで使用されるエンティティフォームモードのフォームクラスを自動的に登録します。
hook_entity_insert
Forms Stepsワークフロー内でエンティティが作成されたときにワークフロー追跡レコードを作成します。
hook_entity_presave
Forms Stepsワークフロー内でエンティティが更新されたときにワークフロー追跡レコードを更新します。
hook_entity_predelete
ソースエンティティが削除されたときにワークフローインスタンスを自動的に削除します。
hook_theme
プログレスバーレンダリング用のitem_list__forms_stepsテーマフックを定義します。
Drush Commands 1
drush forms_steps:attach-entity
既存のエンティティをForms Stepsワークフローインスタンスにアタッチします。既存コンテンツをマルチステップワークフローにインポートしたり、プログラムでエンティティをワークフローにリンクするのに便利です。
Troubleshooting 6
一部のエンティティタイプ(Userなど)はカスタムフォームモード用のデフォルトフォームクラスを持っていません。カスタムモジュールでhook_entity_type_alter()を実装してフォームクラスを割り当てます: $entity_types['user']->setFormClass('my_form_mode', 'Drupal\user\ProfileForm');
管理 > サイト構築 > [エンティティタイプ] > フォーム表示の管理で、選択したバンドルに対してフォームモードが有効になっていることを確認してください。新しいフォームモードを追加した後はキャッシュをクリアしてください。
ワークフローにプログレスステップが設定されていること、および管理 > サイト構築 > ブロックレイアウトでプログレスバーブロックが表示可能なリージョンに配置されていることを確認してください。ブロックはForms Stepsルート上でのみレンダリングされます。
複数ステップにわたる匿名ユーザー登録の場合、自動ログインを有効にする(アカウント設定でメール認証を無効化)か、StepChangeEventサブスクライバーを実装して最初のステップ後にユーザーをログインさせます。
無効なinstance_idでステップにアクセスした場合に発生します。ユーザーが最初のステップからワークフローに従っていることを確認するか、Drushコマンドを使用して既存のエンティティをワークフローインスタンスにアタッチしてください。
複数のステップで単一のエンティティを編集する場合、各ステップは同じエンティティタイプとバンドルを使用する必要があります。ステップ内の異なるエンティティタイプ/バンドルは別々のエンティティを作成します。ステップ設定の一貫性を確認してください。
Security Notes 5
- モジュールはDrupalのエンティティアクセスシステムを尊重します - ユーザーはステップで使用されるエンティティタイプの作成/更新権限を持っている必要があります
- 複数ステップにわたる匿名ユーザー登録はセキュリティ上の慎重な検討が必要です - モジュールは匿名ユーザーが作成したばかりのエンティティに対する更新権限を付与できません
- ユーザー登録ワークフローでは、最初のステップ後の自動ログインを使用するか、メール認証を要求することを検討してください
- ワークフローインスタンスIDはURLで渡されるUUIDです - 推測は容易ではありませんが、ワークフロー状態への直接アクセスを提供します
- 「administer forms_steps」権限はワークフロー設定の完全な制御を付与します - 慎重に割り当ててください