È possibile utilizzare Ajax per ottenere questo risultato. Drupal 7 ha un buon supporto Ajax ora. Nel tuo primo elenco selezionato (città) dovrai aggiungere le informazioni Ajax. Quindi, il secondo elenco di selezione può essere popolato in base alle informazioni nel primo. Puoi anche nascondere il secondo elenco di selezione fino a quando non viene selezionata un'opzione nella prima, e ti spiegherò come farlo tra poco. Innanzitutto, per impostare il modulo di base:
$form['city'] = array(
'#type' => 'select',
'#title' => t('City'),
'#options' => $options,
'#ajax' => array(
'event' => 'change',
'wrapper' => 'squadron-wrapper',
'callback' => 'mymodule_ajax_callback',
'method' => 'replace',
),
);
$form['squadron_wrapper'] = array('#prefix' => '<div class="squadron-wrapper">', '#suffix' => '</div>');
$form['squadron_wrapper']['squadron'] = array(
'#type' => 'select',
'#title' => t('Squadron'),
'#options' => $squadron_options,
);
Questa è solo la configurazione di base degli elementi. Ora avrai bisogno di un modo per determinare quali opzioni dovrebbero andare nello squadrone. Per prima cosa devi identificare il tuo callback Ajax nell'elenco di selezione 'città'. Nella maggior parte dei casi puoi semplicemente restituire l'elemento che avvolge l'elemento ajax, in questo caso $ form.
function mymodule_ajax_callback($form, $form_state) {
return $form;
}
Ora, quando l'elenco di selezione 'città' cambia, ricostruirà la parte del modulo di avvolgimento di squadroni. Il valore di "città" sarà ora in $ form_state ["valori"]. Quindi, quando il modulo viene ricostruito, dobbiamo determinare quali opzioni dare alla lista selezionata in base al valore di "città".
// Get the value of the 'city' field.
$city = isset($form_state['values']['city']) ? $form_state['values']['city'] : 'default';
switch ($city) {
case 'default':
// Set default options.
break;
case 'losangeles':
// Set up $squadron_options for los angeles.
break;
}
// If you want to hide the squadron select list until a city is
// selected then you can do another conditional.
if ($city !== 'default') {
$form['squadron_wrapper']['squadron'] = array(
'#type' => 'select',
'#title' => t('Squadron'),
'#options' => $squadron_options,
);
}