it-swarm.com.de

Wie kann ich das Senden eines Webformulars in Drupal 7?

Ich habe versucht, das Webform-Rendering mit 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.

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;
      }
    }
8
Matthew Woodard

Eine der einfachsten Möglichkeiten, wenn Sie nur ein bestimmtes Formular optimieren möchten, besteht darin, das jquery form plugin 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 #your_form_ID mit Ihrer 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.

0
esafwan