Отправить Webform-у с помощью AJAX
14 января 2017
Пример отправки веб-формы webform_client_form_123 с помощью AJAX:
/**
* Implements hook_form_FORM_ID_alter(): webform_client_form_123.
*/
function mymodule_form_webform_client_form_123_alter(&$form, &$form_state) {
$form['actions']['submit']['#ajax'] = array(
'callback' => 'mymodule_form_webform_client_form_ajax_submit',
'wrapper' => $form['#id'],
);
// Удаляем #pre_render, иначе не будет работать ajax
unset($form['actions']['submit']['#pre_render']);
}
/**
* Ajax submit.
*/
function mymodule_form_webform_client_form_ajax_submit($form, &$form_state) {
if (form_get_errors()) {
return $form;
}
else {
$webform = $form['#node']->webform;
return check_markup($webform['confirmation'], $webform['confirmation_format']);
}
}Есть и соответствующий модуль.
Добавлено 03.03.2015
Способ аяксифицировать все веб-формы открывающиеся в модуле Auto-Dialog:
/**
* Implements hook_form_BASE_FORM_ID_alter(): webform_client_form.
*/
function MODULENAME_form_webform_client_form_alter(&$form, &$form_state) {
if ($form['#action'] == base_path() . 'system/ajax' || _autodialog_check_request()) {
$form['actions']['submit']['#ajax'] = array(
'callback' => 'MODULENAME_form_webform_client_form_ajax_submit',
'wrapper' => $form['#id'],
);
unset($form['actions']['submit']['#pre_render']);
}
}
/**
* Ajax submit.
*/
function MODULENAME_form_webform_client_form_ajax_submit($form, &$form_state) {
if (form_get_errors()) {
return $form;
}
else {
$webform = $form['#node']->webform;
return check_markup($webform['confirmation'], $webform['confirmation_format']);
}
}