Як додати додатковий обробник подання у формі оформлення замовлення на комерцію?


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

Відповіді:


14

Те, що ви робите, правильно.

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

$form['buttons']['continue']['#submit'][]='c_coupon_review_submit';

тож як я можу додати обробник подання до кнопки «Продовжити»?
Ахмад

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...
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.