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

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

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

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...
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.