Bunu başarmak için Ajax kullanabilirsiniz. Drupal 7 şimdi iyi Ajax desteğine sahip. İlk seçim listenize (şehir) Ajax bilgileri eklemeniz gerekecek. Ardından, ikinci seçim listesi, birinci kısımdaki bilgilere göre doldurulabilir. İlk seçimde bir seçenek seçilinceye kadar ikinci seçim listesini de gizleyebilirsiniz ve bunun nasıl yapılacağını biraz açıklayacağım. İlk olarak, temel formu ayarlamak için:
$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,
);
Bu sadece elementlerin temel kurulumudur. Şimdi hangi seçeneklerin filoda olması gerektiğini belirlemek için bir yola ihtiyacınız olacak. Öncelikle, 'şehir' seçim listesinde Ajax geri çağrınızı tanımlamanız gerekir. Çoğu durumda, ajax öğesini saran öğeyi sadece bu durumda $ formuna geri döndürebilirsiniz.
function mymodule_ajax_callback($form, $form_state) {
return $form;
}
Şimdi, 'şehir' seçim listesi değiştiğinde, formun filo-sarmalayıcı kısmını yeniden oluşturacaktır. 'Şehir' değeriniz şimdi $ form_state ['değerler'] cinsinden olacaktır. Öyleyse, form yeniden oluşturulduğunda, 'şehir' değerini temel alarak seçim listesine hangi seçenekleri vereceğimizi belirlememiz gerekir.
// 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,
);
}