Sie können Ajax verwenden, um dies zu erreichen. Drupal 7 hat jetzt gute Ajax-Unterstützung. In Ihrer ersten Auswahlliste (Stadt) müssen Sie Ajax-Informationen hinzufügen. Dann kann die zweite Auswahlliste basierend auf den Informationen in der ersten gefüllt werden. Sie können die zweite Auswahlliste auch ausblenden, bis eine Option in der ersten ausgewählt ist, und ich werde erklären, wie Sie das in Kürze tun. Zunächst richten Sie die Grundform ein:
$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,
);
Dies ist nur die Grundeinstellung der Elemente. Jetzt müssen Sie einen Weg finden, um zu bestimmen, welche Optionen im Geschwader verfügbar sein sollen. Zuerst müssen Sie Ihren Ajax-Rückruf in der Auswahlliste "Stadt" angeben. In den meisten Fällen können Sie nur das Element zurückgeben, das das Ajax-Element umschließt, in diesem Fall $ form.
function mymodule_ajax_callback($form, $form_state) {
return $form;
}
Wenn sich die Auswahlliste "Stadt" ändert, wird der Staffelumbruch-Teil des Formulars neu erstellt. Ihr 'Stadt'-Wert wird jetzt in $ form_state [' Werte '] angegeben. Wenn also das Formular neu erstellt wird, müssen wir anhand des Werts von "Stadt" festlegen, welche Optionen der Auswahlliste zugewiesen werden sollen.
// 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,
);
}