Drupal → Отправить Webform-у с помощью AJAX
Пример отправки веб-формы 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']); } }
Комментарии
А можно ли как-нибудь узнать, что запрос завершён верно и очистить форму или показать подтверждение?
ознакомиться с 10-ю строчками кода выше например
Я, видимо, совсем идиот. Я нашёл вот это: http://xandeadx.ru/blog/drupal/753 и уже ожидал ответ про эту статью, но ваш ответ мне вообще непонятен. Ничего же не вызывается.
что?
Я пытаюсь сказать: как скриптом узнать, что форма успешно отправлена, если отправлять её вышеуказанным способом?
После сабмита на экране вообще ничего не происходит, крутится лоадер и всё. Даже форма не моргает. Но отправляется.
каким скриптом?
что-то не так делаете
Воспользуюсь webform ajax модулем, спасибо. Примеры или несовместимы с Webform 4.7, или с моим набором модулей.
webform_client_form_123 у меня ваш модуль то раньше давал сообщение о сабмите, теперь показывает текст поля Пояснение, вместо сообщения о сабмите.
видимо, после добавления этого поля описания формы ваш модуль стал его показывать вместо сообщения о завершении
хотя нормально работает, просто не было добавлено сообщение о сабмите в настройках формы.
еще можно было бы придумать как скрыть поле Пояснение в форме (текстовая область на полями). а так все отлично работает!
более того, я добавил такую опцию для всех форм, изменив название модуля на
mymodule_form_webform_client_form_alter
а если сообщение об отправке не заполнено, как тогда вызвать в вашем модуле стандартное сообщение модуля Wtbform что данные получены?
Не подскажите как очистить форму, в случае когда
if (form_get_errors()) {
return $form;
}
else {
return $form;
}
Нужен возрат формы, только с пустыми полями.
Попробуйте перед возвращением формы пройтись по ее элементам и установить
#default_value
вNULL
:Оставить комментарий