이를 위해 Ajax를 사용할 수 있습니다. Drupal 7은 이제 Ajax를 잘 지원합니다. 첫 번째 선택 목록 (도시)에서 Ajax 정보를 추가해야합니다. 그런 다음 첫 번째 정보를 기반으로 두 번째 선택 목록을 채울 수 있습니다. 첫 번째 옵션이 선택 될 때까지 두 번째 선택 목록을 숨길 수도 있으며, 그 방법을 조금 설명하겠습니다. 먼저 기본 양식을 설정하십시오.
$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,
);
이것은 요소의 기본 설정입니다. 이제 전대에서 어떤 옵션을 선택해야하는지 결정해야합니다. 먼저 '도시'선택 목록에서 Ajax 콜백을 식별해야합니다. 대부분의 경우 ajax 요소를 감싸는 요소 (이 경우 $ form)를 반환 할 수 있습니다.
function mymodule_ajax_callback($form, $form_state) {
return $form;
}
이제 '도시'선택 목록이 변경되면 양식의 전대 포장지 부분이 다시 작성됩니다. 이제 '도시'값이 $ form_state [ 'values']에있게됩니다. 따라서 양식을 다시 작성할 때 'city'값을 기준으로 선택 목록에 제공 할 옵션을 결정해야합니다.
// 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,
);
}