Ajax

 →  Два селекта на ajax

published 23 July 2011

Два селекта: марка и модель. Выбираем марку и у нас подгружается список моделей. В коллбэк функции возвращаем форму, которую хотим изменить. Через** $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;