Drupal → Отправить Webform-у с помощью AJAX

18.02.2015

Пример отправки веб-формы 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
Похожие записи

Комментарии

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

ознакомиться с 10-ю строчками кода выше например

Я, видимо, совсем идиот. Я нашёл вот это: http://xandeadx.ru/blog/drupal/753 и уже ожидал ответ про эту статью, но ваш ответ мне вообще непонятен. Ничего же не вызывается.

Я пытаюсь сказать: как скриптом узнать, что форма успешно отправлена, если отправлять её вышеуказанным способом?

После сабмита на экране вообще ничего не происходит, крутится лоадер и всё. Даже форма не моргает. Но отправляется.

каким скриптом?

После сабмита на экране вообще ничего не происходит, крутится лоадер и всё. Даже форма не моргает. Но отправляется.

что-то не так делаете

Воспользуюсь webform ajax модулем, спасибо. Примеры или несовместимы с Webform 4.7, или с моим набором модулей.

webform_client_form_123 у меня ваш модуль то раньше давал сообщение о сабмите, теперь показывает текст поля Пояснение, вместо сообщения о сабмите.
видимо, после добавления этого поля описания формы ваш модуль стал его показывать вместо сообщения о завершении

хотя нормально работает, просто не было добавлено сообщение о сабмите в настройках формы.
еще можно было бы придумать как скрыть поле Пояснение в форме (текстовая область на полями). а так все отлично работает!
более того, я добавил такую опцию для всех форм, изменив название модуля на
mymodule_form_webform_client_form_alter

а если сообщение об отправке не заполнено, как тогда вызвать в вашем модуле стандартное сообщение модуля Wtbform что данные получены?

Гость
07.12.2015, 05:49

Не подскажите как очистить форму, в случае когда
if (form_get_errors()) {
return $form;
}
else {
return $form;
}
Нужен возрат формы, только с пустыми полями.

Не подскажите как очистить форму, в случае когда
if (form_get_errors()) {
return $form;
}
else {
return $form;
}
Нужен возрат формы, только с пустыми полями.

Попробуйте перед возвращением формы пройтись по ее элементам и установить #default_value в NULL:

    foreach (element_children($form) as $key) {
      if (!empty($form[$key]['#default_value'])) {
        $form[$key]['#default_value'] = NULL;
      }
    }

  return $form;

Добавить комментарий