Cuando creo un cuadro de selección estándar utilizando la API de formulario de Drupal 7, el primer valor (también el seleccionado en un 'formulario en blanco' nuevo) es <option selected="selected" value="">- Select -</option>
. Este valor no se especifica en la definición del formulario y no estoy modificando el formulario. (Esto esta bien)
Sin embargo, cuando creo un segundo cuadro de selección que depende del primer uso #states
, no tiene ningún valor predeterminado. Para formularios complejos con dependencias múltiples, esta inconsistencia es un problema.
Una definición de formulario de ejemplo es la siguiente:
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;
}
En este sencillo ejemplo, tenemos 2 cuadros de selección y un botón de enviar. Los dos cuadros de selección se muestran como:
______________ ________________
| - Select - |v| | Something |v|
`--------------' `----------------'
| - Select - | | Something | <- no empty option
| First | | Another thing |
| Second | | Something else |
| Third | | Final thing |
-------------- ----------------
(Debido a la #states
configuración, el segundo cuadro de selección solo aparece cuando el primer cuadro de selección tiene seleccionado "Tercero")
Esta inconsistencia está causando problemas en una situación en la que estamos generando formas dinámicas complejas con campos interdependientes.
¿Alguien tiene alguna idea de por qué los campos reciben opciones inconsistentes y cuál es el mejor enfoque para solucionar el problema?