Webform 7.x-4.1 Formulaire modal et Soumission Ajax

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à tous,

Je suis passé sur Webform 7.x-4.1 et j'ai un module custom qui permet d'ouvrir un formulaire dans une fenêtre (jquery ui dialog) et de le valider sans recharger la page...

Depuis la mise à jour de webform la page ce recharge quand je valide le formulaire.

Donc dans un premier temps je charge mon formulaire dans une fenêtre dialog (Jquery ui dialog) j'utiliser le preprocess page :

function [custom_module]_preprocess_page(&$variables){
drupal_add_library('system', 'ui.dialog');
$block = module_invoke('webform', 'block_view', 'client-block-[id_webform]');
$content = preg_replace("/\r?\n/", "\n", addslashes($block['content']));
drupal_add_js('jQuery(document).ready(function(){
jQuery(window).resize(function(){
      jQuery(".ui-dialog-content").dialog("option","position","center");
});
    jQuery("#dialogWebform a").click(function() {
        var link = jQuery(this).attr("href");
        var dial = jQuery("<div>").dialog({
            dialogClass:"sendMyfriendFixed",
         title: "Titre de mon formulaire",
            modal: true,       
           resizable: false,
          draggable: false,
          width: 630,
            height:450
     });
    dial.html(\''.$content.'\');
   return false;
  });
    });', 'inline');
}

Puis je modifie le formulaire à l'aide du hook_form_alter

function [custom_module]form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'webform_client_form
[id_webform]'){
      $form['actions']['submit']['#ajax'] = array(
         'callback' => '[custom_module]_ajax_submit_action',
         'wrapper' => 'webform-client-form-' . $form['#node']->nid,
         'method' => 'replace',
          'effect' => 'fade'
          );
}
}

Et enfin je créer le callback

function [custom_module]_ajax_submit_action($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;
  }
}

Ce module fonctionnait pas trop mal... Le problème depuis la maj c'est que au clique de bouton de validation du formulaire la page ce charge alors que l'ajax devrait empêcher la page de ce recharger...

Si vous avez une idée je suis preneur...

Cordialement.

Version de Drupal : 
Tags :