Два селекта: марка и модель. Выбираем марку и у нас подгружается список моделей. В коллбэк функции возвращаем форму, которую хотим изменить. Через** $form_state** получаем значение.
Будьте внимательны, форма перестраивается занова, но визуально меняется только изменяющийся элемент.
//функция создания формы
function bull_form($form, $form_state,$nid = NULL) {
//запрос к таксономии для заполнения селекта
$query = db_select(’taxonomy_term_data’, ’t’);
$query->innerJoin(’taxonomy_term_hierarchy’, ‘r’, ’t.tid = r.tid’);
$query->fields(‘r’,array(‘parent’));
$query->fields(’t’);
$query->condition(‘r.parent’, PARENT, ‘=’ );
$query->orderBy(’t.name’, ‘ASC’);
$result = $query->execute();
$options = array();
//заполняем option для select
foreach($result as $item){
$options[$item->tid] = $item->name;
}
//проверям выбрана ли марка, делаем запрос по моделям этой марки (то есть пришел ли запрос от аякса)
if(isset($form_state[‘values’][‘marka’])) {
$tid = $form_state[‘values’][‘marka’];
$query = db_select(’taxonomy_term_data’, ’t’);
$query->innerJoin(’taxonomy_term_hierarchy’, ‘r’, ’t.tid = r.tid’);
$query->fields(’t’);
$query->fields(‘r’,array(‘parent’));
$query->condition(‘r.parent’, $tid, ‘=’ );
$query->orderBy(’t.name’, ‘ASC’);
$result = $query->execute();
$options2 = array();
//собираем опции для селекта
foreach($result as $item){
$options2[$item->tid] = $item->name;
}
}
// селект марки
$form[’left’][‘marka’] = array (
‘#type’ => ‘select’,
‘#title’ => t(‘Producer’),
‘#options’ => $options,
‘#ajax’ => array(
//прописываем какую звать функцию при изменение селекта
‘callback’ => ‘ajax_get_models’,
//какой элемент html в форме заменять
‘wrapper’ => ‘replace_models_div’,
),
);
$form[‘right’][‘model’] = array (
‘#type’ => ‘select’,
‘#title’ => t(‘Model’),
‘#options’ => (isset($options2)) ? $options2 : array(‘choose model’),
//оборачиваем в div для замены
‘#prefix’ => ‘’,
‘#suffix’ => ‘’,
);
return $form;