J'ai essayé de modifier le rendu du formulaire Web à l'aide de hook_form_alter()
et hook_node_view()
dans un module personnalisé afin que je puisse ajouter '#ajax' quelque part.
Quelqu'un at-il déjà eu une certaine expérience de travail avec webform et ajax sur D6 ou D7? Je suppose que la logique serait la même pour D6 et D7, puis seulement les changements de mise en œuvre.
Le module Ajax fonctionne pour moi dans Drupal 6.
Pour 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;
}
}
Une des manières les plus simples si vous cherchez à ajaxifier juste un formulaire particulier sera d'ajouter le plugin de formulaire jquery . C'est assez simple.
Ajoutez le code ci-dessous à votre fonction de prétraitement de page dans le fichier template.php.
Ajoutez d'abord le plugin jquery avec le code ci-dessous.
drupal_add_js (drupal_get_path ('theme', 'your_theme'). "/js/jquery.form.js");
Ajoutez ensuite le code ci-dessous, remplacez #your_form_ID
avec votre identifiant de formulaire
drupal_add_js ('
(function($){
$(document).ready(function() {
$("#your_form_ID").ajaxForm(function() {
alert("Thank you for your comment!");
});
}); }(jQuery));;
', 'inline');
C'est tout ce que vous avez fait. Vous souhaitez peut-être envisager de charger les scripts uniquement les pages dont vous avez besoin.