Bạn có thể sử dụng Ajax để thực hiện điều này. Drupal 7 có hỗ trợ Ajax tốt ngay bây giờ. Trên danh sách chọn đầu tiên (thành phố), bạn sẽ cần thêm thông tin Ajax. Sau đó, danh sách chọn thứ hai có thể được điền dựa trên thông tin trong danh sách đầu tiên. Bạn thậm chí có thể ẩn danh sách chọn thứ hai cho đến khi một tùy chọn trong mục đầu tiên được chọn và tôi sẽ giải thích cách thực hiện điều đó trong một lát. Đầu tiên, để thiết lập các hình thức cơ bản:
$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,
);
Đây chỉ là thiết lập cơ bản của các yếu tố. Bây giờ bạn sẽ cần một cách để xác định những tùy chọn nào nên đi trong phi đội. Trước tiên, bạn cần làm cho cuộc gọi lại Ajax của bạn được xác định trong danh sách chọn 'thành phố'. Trong hầu hết các trường hợp, bạn chỉ có thể trả về phần tử bao bọc phần tử ajax, trong trường hợp này là $ form.
function mymodule_ajax_callback($form, $form_state) {
return $form;
}
Bây giờ, khi danh sách chọn 'thành phố' thay đổi, nó sẽ xây dựng lại phần bao bọc phi đội của biểu mẫu. Giá trị 'thành phố' của bạn bây giờ sẽ ở $ form_state ['value']. Vì vậy, khi biểu mẫu được xây dựng lại, chúng ta cần xác định những tùy chọn nào sẽ cung cấp cho danh sách chọn dựa trên giá trị của 'thành phố'.
// 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,
);
}