Quando creo una casella di selezione standard utilizzando l'API del modulo Drupal 7, il primo valore (anche quello selezionato in un nuovo "modulo vuoto") è <option selected="selected" value="">- Select -</option>
. Questo valore non è specificato nella definizione del modulo e non sto modificando il modulo. (Questo va bene)
Tuttavia, quando creo una seconda casella di selezione che dipende dal primo utilizzo #states
, non ha alcun valore predefinito. Per le forme complesse con dipendenze multiple questa incoerenza è un problema.
Una definizione del modulo di esempio è la seguente:
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 questo semplice esempio, abbiamo 2 caselle di selezione e un pulsante di invio. Le due caselle selezionate vengono visualizzate come:
______________ ________________
| - Select - |v| | Something |v|
`--------------' `----------------'
| - Select - | | Something | <- no empty option
| First | | Another thing |
| Second | | Something else |
| Third | | Final thing |
-------------- ----------------
(A causa #states
dell'impostazione, la seconda casella di selezione appare solo quando la prima casella di selezione ha "Terzo" selezionato)
Questa incoerenza sta causando problemi in una situazione in cui stiamo generando forme dinamiche complesse con campi interdipendenti.
Qualcuno ha idea del perché ai campi vengano offerte opzioni incoerenti e quale sia l'approccio migliore per aggirare il problema?