Wie kann ich das Senden eines Webformulars in Drupal 7 bestätigen?


8

Ich habe versucht, das Webform-Rendering mithilfe hook_form_alter()und hook_node_view()in einem benutzerdefinierten Modul zu ändern, damit ich irgendwo '#ajax' hinzufügen kann.

Hat jemand bereits Erfahrung mit Webform und Ajax auf D6 oder D7? Ich denke, die Logik wäre für D6 und D7 dieselbe, dann ändert sich nur die Implementierung.


1
D6 und D7 haben sehr unterschiedliche Ajax-Frameworks.
Jeremy French

Ja, aber es ist kein Problem. Das eigentliche Problem, das ich habe, ist, dass ich keinen Hook finde, um das Webform-Formular zu ändern und ein Ajax-Ereignis über die Drupal-Formular-API hinzuzufügen.
E. de Saint Chamas

Haben Sie eine spezielle Frage zu Ajax? Das klingt gesprächig. Nur als Referenz: api.drupal.org/api/drupal/includes--ajax.inc/group/ajax/7
Citricguy

Ich mag es nicht wirklich, Antworten nur mit Links zu "How to" -Blogposts ohne eigene Erklärung zu posten, also füge ich dies einfach als Kommentar hinzu: envisioninteractive.com/drupal/… - wenn dies letztendlich funktioniert, wir können es vielleicht als Antwort hinzufügen. Es scheint, als ob dies das ist, was Sie brauchen könnten.
Danny Englander

Antworten:


8

Das Ajax-Modul funktioniert für mich in Drupal 6.

Für 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;
      }
    }

Was genau soll dieser Code tun? Ich habe es meinem Thema hinzugefügt (nachdem ich die Namen des Hakens geändert habe, um sie meinem Thema anzupassen), aber ich bemerke keine Auswirkungen.
John Slegers

Es wird in ein benutzerdefiniertes Modul innerhalb Ihres Themas eingefügt.
Neelmeg

0

Eine der einfachsten Möglichkeiten, wenn Sie nur ein bestimmtes Formular optimieren möchten , besteht darin, das Plugin für das Abfrageformular hinzuzufügen . Es ist ziemlich einfach.

Fügen Sie den folgenden Code zu Ihrer Seitenvorverarbeitungsfunktion in der Datei template.php hinzu.

  1. Fügen Sie zuerst das jquery-Plugin mit dem folgenden Code hinzu.

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

  2. Fügen Sie dann den folgenden Code hinzu und ersetzen Sie ihn #your_form_IDdurch Ihre Formular-ID

    drupal_add_js ('

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

Das ist alles was du getan hast. Vielleicht möchten Sie die Skripte nur auf die Seiten laden, die Sie benötigen.


Ich habe darüber nachgedacht. Jetzt denke ich darüber nach, es zu einem Modul mit einer Konfigurationsseite zu machen, damit alle davon profitieren können. Gibt es so etwas?
Esafwan

-1

Überprüfen Sie, ob das Ajax-Modul Ihnen dabei helfen kann. Finden Sie in der Dokumentation als auch


1
Er fragt nach Drupal 7, dieses Modul ist für D7 noch nicht verfügbar.
Danny Englander

1
Um fair zu sein, obwohl die Frage mit 7 gekennzeichnet ist, wird explizit gefragt, ob jemand Erfahrung mit Ajax in D6 oder D7 hat.
EmmyS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.