Drupal 7フォームAPIを使用して標準の選択ボックスを作成すると、最初の値(新しい「空白のフォーム」でも選択されたもの)はになり<option selected="selected" value="">- Select -</option>
ます。この値はフォーム定義で指定されておらず、フォームの変更は行っていません。(これで結構です)
ただし、最初のを使用して2番目の選択ボックスを作成すると、その#states
ようなデフォルト値はありません。複数の依存関係を持つ複雑なフォームの場合、この不整合が問題になります。
フォーム定義の例は次のとおりです。
function sb_quickquote_test_form($form, &$form_state, $post=array()) {
$fields['first_select'] = array(
'#type' => 'select',
'#title' => 'First select box',
'#options' => Array('First', 'Second', 'Third'),
'#required' => TRUE,
);
$fields['dependent_delect'] = array(
'#type' => 'select',
'#title' => 'Dependent select box',
'#options' => Array('Something', 'Another thing', 'Something else', 'Final thing'),
'#states' => Array(
'visible' => Array('select[name=first_select]' => array('value' => '2')),
'required' => Array('select[name=first_select]' => array('value' => '2')),
),
);
$fields['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $fields;
}
この簡単な例では、2つの選択ボックスと送信ボタンがあります。2つの選択ボックスは次のように表示されます。
______________ ________________
| - Select - |v| | Something |v|
`--------------' `----------------'
| - Select - | | Something | <- no empty option
| First | | Another thing |
| Second | | Something else |
| Third | | Final thing |
-------------- ----------------
(#states
設定のため、2番目の選択ボックスは、最初の選択ボックスで「3番目」が選択されている場合にのみ表示されます)
この不整合は、相互に依存するフィールドを持つ複雑な動的フォームを生成している状況で問題を引き起こしています。
なぜフィールドに一貫性のないオプションが与えられているのか、そして問題を回避するための最良のアプローチは何か考えがありますか?