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

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

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');

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