3

Drupal 6 フォームの検証に問題があります。

2 つのドロップダウンがあります。2 番目のドロップダウン (プロジェクト) のオプションは、最初のドロップダウン (クライアント) で選択したオプションによって異なります。クライアントを変更すると、このクライアントからすべてのプロジェクトを取得します。

現在、フォームが検証され、default_value として他のクライアントが選択されている場合、プロジェクトのオプションはフォーム構築の場合と同じではありません。つまり、プロジェクトの選択されたオプションは、フォーム用に構築されたオプション配列にありません。

フォーム検証のためにオプション配列を変更する方法はありますか? クライアントの選択に応じて、検証中のプロジェクトのオプション配列が構築されることは?

4

2 に答える 2

2

ここで理解しておくべき主なことは、フォーム構築関数は最初のフォーム構築のために一度だけ呼び出されるのではなく、検証が行われる前にフォーム送信時に再度呼び出されるということです。そのため、フォーム ビルド関数を調整$optionsして、選択したクライアント (選択されている場合) に応じて、プロジェクトの選択フィールド用に異なる配列を作成できます。

$form_state['values']これを行うには、次のように をチェックします。

function your_form(&$form_state) {
  // ... other form building stuff
  // Start with initial default options for project select
  $project_options = array('- Please select client first -');
  // Adjust, if client already selected
  if (isset($form_state['values']) && $form_state['values']['your_client_select']) {
    $selected_client = $form_state['values']['your_client_select'];
    $project_options = your_function_to_build_project_options_by_client($selected_client);
  }
  // ... build project select using those options
  // ... other form building stuff
}
于 2012-05-07T10:42:08.217 に答える
0

これは、コーディングなしで実現できます。Conditional fieldsというモジュールがあります。このモジュールを使用すると、フォームのルールを設定できます。特定のフィールドの特定の値に応じて特定の要素を非表示にする。

于 2012-05-11T09:30:27.343 に答える