Puedes usar Ajax para lograr esto. Drupal 7 tiene buen soporte Ajax ahora. En su primera lista de selección (ciudad) deberá agregar información de Ajax. Luego, la segunda lista de selección se puede completar según la información de la primera. Incluso puede ocultar la segunda lista de selección hasta que se seleccione una opción en la primera, y explicaré cómo hacerlo en un momento. Primero, para configurar la forma básica:
$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,
);
Esta es solo la configuración básica de los elementos. Ahora necesitará una manera de determinar qué opciones deben ir en el escuadrón. Primero debe hacer que su devolución de llamada Ajax se identifique en la lista de selección 'ciudad'. En la mayoría de los casos, puede devolver el elemento que envuelve el elemento ajax, en este caso $ form.
function mymodule_ajax_callback($form, $form_state) {
return $form;
}
Ahora, cuando la lista de selección 'ciudad' cambie, reconstruirá la parte de envoltura del escuadrón del formulario. Su valor de 'ciudad' ahora estará en $ form_state ['valores']. Entonces, cuando se reconstruye el formulario, necesitamos determinar qué opciones dar a la lista de selección en función del valor de 'ciudad'.
// 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,
);
}