Wenn ich mit der Drupal 7-Formular-API ein Standardauswahlfeld erstelle, ist der erste Wert (auch der, der in einem neuen "leeren Formular" ausgewählt wurde) <option selected="selected" value="">- Select -</option>
. Dieser Wert ist in der Formulardefinition nicht angegeben und ich ändere kein Formular. (Das ist okay)
Wenn ich jedoch ein zweites Auswahlfeld erstelle, das von der ersten Verwendung abhängt #states
, hat es keinen solchen Standardwert. Bei komplexen Formularen mit mehreren Abhängigkeiten ist diese Inkonsistenz ein Problem.
Eine beispielhafte Formulardefinition lautet wie folgt:
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;
}
In diesem einfachen Beispiel haben wir 2 Auswahlfelder und eine Senden-Schaltfläche. Die beiden Auswahlfelder werden wie folgt angezeigt:
______________ ________________
| - Select - |v| | Something |v|
`--------------' `----------------'
| - Select - | | Something | <- no empty option
| First | | Another thing |
| Second | | Something else |
| Third | | Final thing |
-------------- ----------------
(Aufgrund der #states
Einstellung wird das zweite Auswahlfeld nur angezeigt, wenn im ersten Auswahlfeld "Drittes" ausgewählt ist.)
Diese Inkonsistenz verursacht Probleme in einer Situation, in der wir komplexe dynamische Formen mit voneinander abhängigen Feldern erzeugen.
Hat jemand eine Idee, warum die Felder inkonsistente Optionen erhalten und was der beste Ansatz ist, um das Problem zu umgehen?