Submitted by hesslinger on
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.