- accordion(1)
- active-trail(1)
- ajax(1)
- angular(1)
- apache(3)
- bash(4)
- block(2)
- browsers(1)
- button styles(1)
- checkboxes(1)
- code key(1)
- compress(1)
- console(4)
- css(1)
- ctools(1)
- date(1)
- db_query(2)
- db_select(2)
- debian(1)
- dom function(1)
- drag and drop(1)
- drupal 6(3)
- drupal 7(3)
- drupal functions(6)
- drupal_goto()(1)
- drupal_mail(1)
- errors(1)
- eslint(1)
- fancybox(1)
- fedora(1)
- firefox(2)
- firefox addons(1)
- firefox profiles(1)
- form(1)
- form api(5)
- format_date(1)
- git(1)
- hooks(2)
- hook_mail(1)
- hook_theme(1)
- hotkey(1)
- httpd(1)
- husky(1)
- ie(2)
- javascript(2)
- jquery(7)
- jquery plugin(2)
- jquery regex(1)
- js templates(1)
- kb(1)
- like button(1)
- link(1)
- linux(4)
- linux commands(2)
- list(1)
- list styles(1)
- markup(1)
- menu(3)
- mobile(1)
- modal(2)
- module develop(2)
- modules(1)
- monorepo(1)
- mootools(1)
- mysql(2)
- node_save(1)
- opacity(1)
- opensuse(5)
- opera mini(1)
- padStart(1)
- page.tpl.php(1)
- password hash(1)
- patch(1)
- pdf(1)
- python(1)
- radiobuttons(1)
- reg_ex(2)
- sass(1)
- scripts(1)
- search form(1)
- selenium(1)
- share button(1)
- sms(1)
- ssh(2)
- styles(4)
- switch case(1)
- table style(1)
- tar(1)
- taxonomy(1)
- taxonomy menu(1)
- templates(1)
- theme(4)
- toggle(2)
- touchpad(1)
- tray(1)
- trigger(1)
- typescript(2)
- typescript-eslint(1)
- ubuntu(3)
- usefull function(1)
- views(1)
- virtual hosts(2)
- virtualbox(2)
- vmware(1)
- webdriver(1)
- youtube(1)
- кроссбраузерность(1)
Два селекта на ajax
Два селекта: марка и модель. Выбираем марку и у нас подгружается список моделей. В коллбэк функции возвращаем форму, которую хотим изменить. Через $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' => '<div id="replace_models_div">',
'#suffix' => '</div>',
);
return $form;
}
//callback фукция
function ajax_get_models($form, $form_state) {
//возвращаем измененный селект
//опять обращаю внимание, на странице измениться только селект, но форма будет создана занова
return $form['right']['model'];
}
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' => '<div id="replace_models_div">',
'#suffix' => '</div>',
);
return $form;
}
//callback фукция
function ajax_get_models($form, $form_state) {
//возвращаем измененный селект
//опять обращаю внимание, на странице измениться только селект, но форма будет создана занова
return $form['right']['model'];
}