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

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

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

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...
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.