Comment ajouter un gestionnaire d'envoi supplémentaire dans le formulaire de paiement commercial?

14

Comment ajouter un gestionnaire d'envoi supplémentaire? J'ai essayé cela mais cela n'a pas fonctionné.

function c_coupon_form_alter(&$form, $form_state, $form_id) {
  drupal_set_message($form_id);
  switch($form_id) {
     case 'commerce_checkout_form_review':
      drupal_set_message($form_id . '_form submit');
      $form['#submit'][] = 'c_coupon_review_submit';
  }
}

function c_coupon_review_submit($form, &$form_state) {
  drupal_set_message('submitted');
}
Ahmad
la source

Réponses:

14

Ce que vous faites est correct.

Le problème est que Drupal Commerce a défini l'action d'envoi sur les boutons cliqués, qui seront utilisés à la place des gestionnaires d'envoi définis sur le formulaire lui-même. Vous devez donc ajouter vos gestionnaires d'envoi aux boutons (Annuler, Continuer) que vous souhaitez utiliser votre fonction d'envoi.

$form['buttons']['continue']['#submit'][]='c_coupon_review_submit';
googletorp
la source
alors comment puis-je ajouter le gestionnaire d'envoi au bouton Continuer?
Ahmad
1
Je crois que c'est $form['buttons']['continue']['#submit'][] = ..Vous pouvez inspecter la variable de formulaire et le découvrir.
googletorp
Mais je veux que ma fonction de soumission s'exécute en premier lieu que sa propre fonction de soumission? Comment pourrais-je faire ça?
Ahmad
Voilà une nouvelle question. Les commentaires ne sont pas destinés à poser / répondre à des questions.
googletorp
6

Pour répondre rapidement à la question raffinée d'Ahmad - comment ajouter sa fonction d'envoi personnalisée AVANT les autres fonctions d'envoi:

if ( empty($form['buttons']['continue']['#submit']) ) {
    $form['buttons']['continue']['#submit'] = array(); // just in case
}
array_unshift($form['buttons']['continue']['#submit'],'c_coupon_review_submit');
Giles B
la source
Pour référence, la question raffinée se trouve dans les commentaires de la réponse de googletorp.
2014
1

Utilisez le code suivant pour ajouter un gestionnaire de soumission supplémentaire à un formulaire. Cela a fonctionné pour moi:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
        if ($form_id == 'xyz') {
            $form['#submit'][] = 'webform_extra_submit_test';
        }
    }

function webform_extra_submit_test($form, &$form_state) {
    global $user;
    $user_id = $user->uid; 
    // do code here $form_state['values'] etc...
}
Astha chauhan
la source