Как отрегулировать отправку веб-формы в Drupal 7?

8

Я попытался изменить визуализацию веб-формы, используя hook_form_alter()и hook_node_view()в пользовательском модуле, чтобы я мог добавить куда-нибудь «#ajax».

Кто-нибудь уже имел опыт работы с webform и ajax на D6 или D7? Я думаю, логика была бы одинаковой для D6 и D7, тогда только изменения в реализации.

Э. де Сен Шамас
источник
1
D6 и D7 имеют очень разные рамки Ajax.
Джереми Френч
Да, они делают, но это не проблема. Реальная проблема, которую я имею, состоит в том, что я не могу найти ловушку, чтобы изменить форму Webform и добавить событие ajax через API формы Drupal.
Э. де Сен-Шамас
У вас есть конкретный вопрос относительно Ajax? Это звучит разговорно. Кроме того, просто для справки: api.drupal.org/api/drupal/includes--ajax.inc/group/ajax/7
Citricguy
Мне не очень нравится публиковать ответы только со ссылками на «как» сообщения в блоге без какого-либо объяснения, поэтому я просто добавлю это в качестве комментария: envisioninteractive.com/drupal/… - если это сработает, мы можем рассмотреть возможность добавления его в качестве ответа, возможно. Кажется, это то, что вам может понадобиться.
Дэнни Энгландер

Ответы:

8

Модуль Ajax работает для меня в Drupal 6.

Для Drupal 7:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
      // see if webform_client_form_ is in the form_id
      if(strstr($form_id, 'webform_client_form_')) {
        // get the nid so we can use it in the wrapper value
        $nid = $form['#node']->nid;
        // add the ajax properties to the submit button
        $form['actions']['submit']['#ajax'] = array(
          'callback' => 'mymodule_webform_js_submit',
          'wrapper' => 'webform-client-form-' . $nid,
          'method' => 'replace',
          'effect' => 'fade',
        );
      }
    }

function mymodule_webform_js_submit($form, $form_state) {
      // define the $sid variable (submission id from webform)
      $sid = $form_state['values']['details']['sid'];
      // if we have a sid then we know the form was properly submitted, otherwise, we'll just return the existing $form array
      if ($sid) {
        // first we have to load up the webform node object
        $node = node_load($form_state['values']['details']['nid']);
        // create an array up with the confirmation message, retreived from the webform node
        $confirmation = array(
          '#type' => 'markup',
          '#markup' => check_markup($node->webform['confirmation'], $node->webform['confirmation_format'], '', TRUE),
        );
        // return the confirmation message
        return $confirmation;
      }
      else {
        // return the form
        return $form;
      }
    }
Мэтью Вудард
источник
Что именно должен делать этот код? Я добавил его в свою тему (после изменения имен хуков в соответствии с моей темой), но никакого влияния не замечаю.
Джон Слегерс
Это входит в пользовательский модуль в вашей теме.
neelmeg
0

Если вы хотите просто настроить конкретную форму, одним из самых простых способов будет добавить плагин формы jquery . Это довольно просто.

Добавьте приведенный ниже код к функции предварительной обработки страницы в файле template.php.

  1. Сначала добавьте плагин jquery с кодом ниже.

    drupal_add_js (drupal_get_path ('theme', 'your_theme'). "/js/jquery.form.js");

  2. Затем добавьте приведенный ниже код, замените его #your_form_IDидентификатором формы

    drupal_add_js (»

                (function($){ 
    $(document).ready(function() { 
    
                $("#your_form_ID").ajaxForm(function() { 
                    alert("Thank you for your comment!"); 
                }); 
    });     }(jQuery));;
    
           ', 'inline');

Это все, что вы сделали. Может быть, вы хотите рассмотреть возможность загрузки скриптов только те страницы, которые вам нужны.

esafwan
источник
Я обдумывал это. Теперь я подумываю о том, чтобы сделать его модулем со страницей конфигурации, чтобы все могли извлечь выгоду. Существует ли что-нибудь подобное?
esafwan
-1

Посмотрите, может ли модуль Ajax помочь вам в этом. Смотрите документацию , а также

pal4life
источник
1
Он просит Drupal 7, этот модуль еще не доступен для D7.
Дэнни Энгландер
1
Чтобы быть справедливым, хотя вопрос помечен как 7, он явно спрашивает, имел ли кто-нибудь опыт работы с ajax в D6 или D7.
EmmyS