Как добавить дополнительный обработчик отправки в форму оформления заказа в коммерции?


Как добавить дополнительный обработчик отправки? Я пробовал это, но это не сработало.

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');
}
Author: Ahmad, 2011-08-17

3 answers

То, что вы делаете, правильно.

Проблема в том, что Drupal Commerce определила действие отправки для нажимаемых кнопок, которое будет использоваться вместо обработчиков отправки, определенных в самой форме. Поэтому вам нужно добавить обработчики отправки к кнопкам (Отмена, Продолжить), которые вы хотите использовать для отправки.

$form['buttons']['continue']['#submit'][]='c_coupon_review_submit';
 15
Author: googletorp, 2014-08-27 09:28:50

Чтобы быстро ответить на уточняющий вопрос Ахмада - как добавить его пользовательскую функцию отправки ПЕРЕД другими функциями отправки:

if ( empty($form['buttons']['continue']['#submit']) ) {
    $form['buttons']['continue']['#submit'] = array(); // just in case
}
array_unshift($form['buttons']['continue']['#submit'],'c_coupon_review_submit');
 6
Author: Giles B, 2014-10-08 22:14:45

Используйте следующий код, чтобы добавить дополнительный обработчик отправки в форму. Это сработало для меня:

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...
}
 1
Author: Astha chauhan, 2014-10-08 21:45:01