xandeadx.ru Блог музицирующего веб-девелопера

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']);
  }
}
Написанное актуально для Webform 4
Похожие записи

Комментарии RSS

А можно ли как-нибудь узнать, что запрос завершён верно и очистить форму или показать подтверждение?

ознакомиться с 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;
}
Нужен возрат формы, только с пустыми полями.

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании