При написании своего модуля столкнулся со следующей проблемой. В состав модуля входила форма с некими полями и тремя кнопками. Две из трех кнопок обрабатывались AJAXом. Первая успешно работала. А вот со второй возникли проблемы. AJAX не отрабатывал (CallBack-функция не вызывалась). Однако в логах сайта появлялось сообщение: "Undefined index: #ajax в функции ajax_form_callback() (строка 379 в файле .../public_html/includes/ajax.inc)."
Поиск решения в интернете результатов не дал. На офф. сайте друпала эта проблема поднималась, однако тестеры не смогли повторить баг.
Корень проблемы оказался безумно прост. У двух из 3-х кнопок было одинаковое значение параметра #value. Сделав все три параметра разными удалось решить проблему.
Если не углубляться,- выходит, что друпал выбирает какой CallBack нужно вызвать, используя в качестве параметра #value.
Далее 2 примера кода. Первый не рабочий. Второй работает прекрасно!
<?php
function add_bron_form($form, &$form_state) {
$ajax1 = array(
'callback' => 'add_new_client',
'effect' => 'slide',
'progress' => array(
'type' => 'throbber',
'message' => '',
),
);
$ajax2 = array(
'callback'=>'add_new_razm',
'effect'=>'slide',
'progress'=>array(
'type'=>'throbber',
'message'=>''
)
);
$form['client']['client_submit'] = array(
'#type' => 'button',
'#value'=> 'Добавить клиента',
'#ajax' => $ajax1
);
$form['proj']['proj_submit'] = array(
'#type' => 'button',
'#value'=> 'Сохранить',
'#ajax' => $ajax2
);
$form['bron_submit'] = array(
'#type' => 'submit',
'#value'=> 'Сохранить',
);
return $form;
}
?>
<?php
function add_bron_form($form, &$form_state) {
$ajax1 = array(
'callback' => 'add_new_client',
'effect' => 'slide',
'progress' => array(
'type' => 'throbber',
'message' => '',
),
);
$ajax2 = array(
'callback'=>'add_new_razm',
'effect'=>'slide',
'progress'=>array(
'type'=>'throbber',
'message'=>''
)
);
$form['client']['client_submit'] = array(
'#type' => 'button',
'#value'=> 'Добавить клиента',
'#ajax' => $ajax1
);
$form['proj']['proj_submit'] = array(
'#type' => 'button',
'#value'=> 'Сохранить проживание',
'#ajax' => $ajax2
);
$form['bron_submit'] = array(
'#type' => 'submit',
'#value'=> 'Сохранить',
);
return $form;
}
?>