Bagaimana cara menambahkan penangan kirim tambahan dalam formulir checkout perdagangan?

14

Bagaimana cara menambahkan penangan kirim tambahan? Saya sudah mencoba ini tetapi tidak berhasil.

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
sumber

Jawaban:

14

Apa yang Anda lakukan itu benar.

Masalahnya adalah bahwa Drupal Commerce telah menetapkan tindakan pengiriman pada tombol yang diklik, yang akan digunakan sebagai pengganti dari penangan yang ditentukan pada formulir itu sendiri. Jadi, Anda perlu menambahkan handler kirim Anda ke tombol (Batalkan, Lanjutkan) yang ingin Anda gunakan fungsi kirim Anda.

$form['buttons']['continue']['#submit'][]='c_coupon_review_submit';
googletorp
sumber
jadi bagaimana saya bisa menambahkan submit handler ke tombol Lanjutkan?
Ahmad
1
Saya percaya $form['buttons']['continue']['#submit'][] = ..Anda dapat memeriksa variabel formulir dan mencari tahu.
googletorp
Tetapi saya ingin agar fungsi kirim saya harus dijalankan terlebih dahulu daripada fungsi kirimnya sendiri? Bagaimana saya bisa melakukan ini?
Ahmad
Itu pertanyaan baru. Komentar tidak dimaksudkan untuk mengajukan / menjawab pertanyaan.
googletorp
6

Untuk dengan cepat menjawab pertanyaan halus Ahmad - cara menambahkan fungsi kirim kustomnya SEBELUM fungsi kirim lainnya:

if ( empty($form['buttons']['continue']['#submit']) ) {
    $form['buttons']['continue']['#submit'] = array(); // just in case
}
array_unshift($form['buttons']['continue']['#submit'],'c_coupon_review_submit');
Giles B
sumber
Untuk referensi, pertanyaan yang disempurnakan ada di komentar dari jawaban dari googletorp.
rooby
1

Gunakan kode berikut untuk menambahkan pengajuan ajukan ekstra ke formulir. Ini bekerja untuk saya:

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...
}
Astha chauhan
sumber