Lorsque je crée une boîte de sélection standard à l'aide de l'API de formulaire Drupal 7, la première valeur (également celle sélectionnée sur un nouveau «formulaire vierge») est <option selected="selected" value="">- Select -</option>
. Cette valeur n'est pas spécifiée dans la définition du formulaire et je ne modifie pas le formulaire. (C'est bon)
Cependant, lorsque je crée une deuxième zone de sélection qui dépend de la première utilisation #states
, elle n'a pas une telle valeur par défaut. Pour les formulaires complexes avec plusieurs dépendances, cette incohérence est un problème.
Un exemple de définition de formulaire est le suivant:
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;
}
Dans cet exemple simple, nous avons 2 cases de sélection et un bouton d'envoi. Les deux cases de sélection sont affichées comme suit:
______________ ________________
| - Select - |v| | Something |v|
`--------------' `----------------'
| - Select - | | Something | <- no empty option
| First | | Another thing |
| Second | | Something else |
| Third | | Final thing |
-------------- ----------------
(En raison du #states
paramètre, la deuxième zone de sélection apparaît uniquement lorsque la première zone de sélection a "Troisième" sélectionné)
Cette incohérence pose des problèmes dans une situation où nous générons des formes dynamiques complexes avec des champs interdépendants.
Quelqu'un a-t-il une idée de la raison pour laquelle les champs reçoivent des options incohérentes et quelle est la meilleure approche pour contourner le problème?