function dynamic_menu() {
$items['dynamic'] = array(
'title' => t('Form Example Dynamic Form'),
'page callback' => 'drupal_get_form',
'page arguments' => array('dynamic_form'),
'file' => 'dynamic.admin.inc',
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM,
);
$items['demo'] = array(
'title' => t('Ajax demo'),
'page callback' => 'drupal_get_form',
'page arguments' => array('automobile_dependent_dropdown'),
'file' => 'dynamic.admin.inc',
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function automobile_dependent_dropdown_submit($form, &$form_state) {
drupal_set_message(t('Submitting values: @values', array('@values' => var_export($form_state['values'], TRUE))));
}
/**
* A form with a dropdown whose options are dependent on a
* choice made in a previous dropdown.
*
* On changing the first dropdown, the options in the second
* are updated.
*/
function automobile_dependent_dropdown($form, &$form_state) {
// get the list of manufacturers to populate the manufacturer dropdown
$options_first = _automobile_get_manufacturer_dropdown_options();
$selected = isset($form_state['values']['manufacturer_dropdown']) ? $form_state['values']['manufacturer_dropdown'] : key($options_first);
$form['manufacturer_dropdown'] = array(
'#type' => 'select',
'#title' => 'Manufacturer',
'#options' => $options_first,
'#default_value' => $selected,
'#ajax' => array(
'callback' => 'automobile_dependent_dropdown_callback',
'wrapper' => 'dropdown_model_replace',
),
);
$form['model_dropdown'] = array(
'#type' => 'select',
'#title' => 'Model',
'#prefix' => '<div id="dropdown_model_replace">',
'#suffix' => '</div>',
'#options' => _automobile_get_model_dropdown_options($selected),
'#default_value' => isset($form_state['values']['model_dropdown']) ? $form_state['values']['model_dropdown'] : '',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
function automobile_dependent_dropdown_callback($form, $form_state) {
return $form['model_dropdown'];
}
function _automobile_get_manufacturer_dropdown_options() {
return drupal_map_assoc(array(t('Honda'), t('Toyota'), t('Ford'), t('Volkswagen')));
}
function _automobile_get_model_dropdown_options($key = '') {
$options = array(
t('Honda') => drupal_map_assoc(array(t('Accord'), t('Civic'), t('CRX'), t('Pilot'))),
t('Toyota') => drupal_map_assoc(array(t('Camry'), t('Yaris'), t('Tundra'),t('Tacoma'))),
t('Ford') => drupal_map_assoc(array(t('F-150'), t('Explorer'), t('Escape'), t('Edge'))),
t('Volkswagen') => drupal_map_assoc(array(t('GTI'), t('Passat'), t('Jeta'), t('Polo'))),
);
if (isset($options[$key])) {
return $options[$key];
}
else {
return array();
}
}