Comment ajaxify soumettre un formulaire Web dans Drupal 7?


8

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 de pouvoir 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.


1
D6 et D7 ont des frameworks Ajax très différents.
Jeremy French

Oui, mais ce n'est pas un problème. Le vrai problème que j'ai est que je ne trouve pas de crochet pour modifier le formulaire Webform et ajouter un événement ajax via l'API de formulaire Drupal.
E. de Saint Chamas

Avez-vous une question spécifique concernant Ajax? Cela semble conversationnel. Aussi, juste pour référence: api.drupal.org/api/drupal/includes--ajax.inc/group/ajax/7
Citricguy

Je ne aime pas vraiment des réponses juste poster des liens vers « comment » les messages de blog sans aucune explication de mon propre donc je vais juste ajouter ceci comme commentaire: envisioninteractive.com/drupal/... - si cela finit par travailler, nous pouvons envisager de l'ajouter comme réponse peut-être. Il semble que c'est ce dont vous pourriez avoir besoin.
Danny Englander

Réponses:


8

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

Qu'est-ce que ce code est censé faire exactement? Je l'ai ajouté à mon thème (après avoir changé les noms des crochets pour qu'ils correspondent à mon thème), mais je ne remarque aucun impact.
John Slegers

Il va dans un module personnalisé dans votre thème.
neelmeg

0

Si vous cherchez à ajaxifier juste un formulaire particulier, l'un des moyens les plus simples consiste à ajouter le plugin jquery form . C'est assez simple.

Ajoutez le code ci-dessous à votre fonction de prétraitement de page dans le fichier template.php.

  1. Ajoutez d'abord le plugin jquery avec le code ci-dessous.

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

  2. Ensuite, ajoutez le code ci-dessous, remplacez-le #your_form_IDpar 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.


J'y ai pensé. Maintenant, je pense à en faire un module avec une page de configuration pour que tout le monde puisse en bénéficier. Existe-t-il quelque chose comme ça?
esafwan

-1

Voyez si le module Ajax peut vous aider. Voir la documentation et


1
Il demande Drupal 7, ce module n'est pas encore disponible pour D7.
Danny Englander

1
Pour être juste, bien que la question soit étiquetée comme 7, elle demande explicitement si quelqu'un avait de l'expérience avec ajax en D6 ou D7.
EmmyS
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.