web-dev-qa-db-fra.com

Comment ajaxify soumettre un formulaire web en Drupal 7?

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.

8
E. de Saint Chamas

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;
      }
    }
8
Matthew Woodard

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.

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

0
esafwan