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

14

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

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
источник

Ответы:

14

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

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

$form['buttons']['continue']['#submit'][]='c_coupon_review_submit';
googletorp
источник
так как я могу добавить обработчик отправки на кнопку Продолжить?
Ахмад
1
Я считаю, что $form['buttons']['continue']['#submit'][] = ..вы можете проверить переменную формы и выяснить.
googletorp
Но я хочу, чтобы моя функция отправки выполнялась первой, чем собственная функция отправки? Как я мог это сделать?
Ахмад
Это новый вопрос. Комментарии не предназначены для того, чтобы задавать / отвечать на вопросы.
googletorp
6

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

if ( empty($form['buttons']['continue']['#submit']) ) {
    $form['buttons']['continue']['#submit'] = array(); // just in case
}
array_unshift($form['buttons']['continue']['#submit'],'c_coupon_review_submit');
Джайлс Б
источник
Для справки уточненный вопрос есть в комментариях к ответу от googletorp.
Роуби
1

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

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...
}
Астха чаухан
источник