Come ajaxify inviare il modulo web in Drupal 7?


8

Ho provato a modificare il rendering del modulo web usando hook_form_alter()e hook_node_view()in un modulo personalizzato in modo da poter aggiungere '#ajax' da qualche parte.

Qualcuno ha già avuto qualche esperienza di lavoro con webform e ajax su D6 o D7? Immagino che la logica sarebbe la stessa per D6 e D7, quindi solo le modifiche all'implementazione.


1
D6 e D7 hanno framework Ajax molto diversi.
Jeremy French,

Sì, lo fanno, ma non è un problema. Il vero problema che sto riscontrando è che non riesco a trovare un hook per modificare il modulo Webform e aggiungere un evento ajax tramite l'API del modulo Drupal.
E. de Saint Chamas,

Hai una domanda specifica su Ajax? Sembra conversazionale. Inoltre, solo per riferimento: api.drupal.org/api/drupal/includes--ajax.inc/group/ajax/7
Citricguy

Non mi piace molto pubblicare le risposte solo con collegamenti a "come" post di blog senza alcuna spiegazione, quindi aggiungerò questo come commento: contemioninteractive.com/drupal/… - se finisce per funzionare, possiamo considerare di aggiungerlo come una risposta forse. Sembra che questo sia ciò di cui potresti aver bisogno.
Danny Englander,

Risposte:


8

Il modulo Ajax funziona per me in Drupal 6.

Per 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;
      }
    }

Cosa dovrebbe fare esattamente questo codice? L'ho aggiunto al mio tema (dopo aver modificato i nomi dell'hook in modo che corrisponda al mio tema), ma non noto alcun impatto.
John Slegers,

Entra in un modulo personalizzato all'interno del tuo tema.
Neelmeg,

0

Uno dei modi più semplici se stai cercando di ajaxify solo un particolare modulo sarà quello di aggiungere il plugin del modulo jquery . È piuttosto semplice.

Aggiungi il codice seguente alla tua funzione di preelaborazione della pagina nel file template.php.

  1. Per prima cosa aggiungi il plugin jquery con il codice qui sotto.

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

  2. Quindi aggiungi il codice seguente, sostituiscilo #your_form_IDcon il tuo ID modulo

    drupal_add_js ('

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

Questo è tutto ciò che hai fatto. Forse vuoi considerare di caricare gli script solo le pagine che ti servono.


L'ho preso in considerazione. Ora sto pensando di renderlo un modulo con una pagina di configurazione in modo che tutti possano trarne beneficio. Esiste qualcosa del genere?
esafwan,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.