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.