it-swarm-vi.com

Làm cách nào để thêm trình xử lý gửi bổ sung trong biểu mẫu thanh toán thương mại?

Làm thế nào để tôi thêm một trình xử lý trình bổ sung? Tôi đã thử điều này nhưng nó không hoạt động.

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

Những gì bạn đang làm là chính xác.

Vấn đề là Drupal Commerce đã xác định hành động gửi trên các nút được nhấp, sẽ được sử dụng thay cho trình xử lý gửi được xác định trên biểu mẫu. Vì vậy, bạn cần thêm trình xử lý gửi của mình đến các nút (Hủy, Tiếp tục) mà bạn muốn sử dụng chức năng gửi của mình.

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

Để nhanh chóng trả lời câu hỏi đã được tinh chỉnh của Ahmad - cách thêm chức năng gửi tùy chỉnh của anh ấy TRƯỚC KHI các chức năng gửi khác:

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
Giles B

Sử dụng mã sau đây để thêm trình xử lý gửi thêm vào biểu mẫu. Nó làm việc cho tôi:

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
Astha chauhan