Wie füge ich einen zusätzlichen Submit-Handler im Commerce-Checkout-Formular hinzu?

14

Wie füge ich einen zusätzlichen Submit-Handler hinzu? Ich habe es versucht, aber es hat nicht funktioniert.

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
quelle

Antworten:

14

Was Sie tun, ist richtig.

Das Problem ist, dass Drupal Commerce die Übermittlungsaktion für die angeklickten Schaltflächen definiert hat, die anstelle der im Formular selbst definierten Übermittlungshandler verwendet wird. Sie müssen also Ihre Submit-Handler zu den Schaltflächen (Abbrechen, Fortfahren) hinzufügen, die Sie für Ihre Submit-Funktion verwenden möchten.

$form['buttons']['continue']['#submit'][]='c_coupon_review_submit';
googletorp
quelle
Wie kann ich den Submit-Handler zur Schaltfläche Continue hinzufügen?
Ahmad
1
Ich glaube, es ist $form['buttons']['continue']['#submit'][] = ..Sie können die Formularvariable überprüfen und herausfinden.
googletorp
Aber ich möchte, dass meine Submit-Funktion zuerst ausgeführt wird als ihre eigene Submit-Funktion? Wie könnte ich das machen?
Ahmad
Das ist eine neue Frage. Kommentare sind nicht zum Stellen / Beantworten von Fragen gedacht.
googletorp
6

Um Ahmads verfeinerte Frage schnell zu beantworten - wie man seine benutzerdefinierte Übermittlungsfunktion VOR anderen Übermittlungsfunktionen hinzufügt:

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
quelle
Als Referenz ist die verfeinerte Frage in den Kommentaren der Antwort von googletorp.
Rooby
1

Verwenden Sie den folgenden Code, um einem Formular einen zusätzlichen Submit-Handler hinzuzufügen. Es hat bei mir funktioniert:

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
quelle