ฉันจะเพิ่มตัวจัดการการส่งข้อมูลเพิ่มเติมในแบบฟอร์มการชำระเงินเพื่อการพาณิชย์ได้อย่างไร


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

เพื่อตอบคำถามที่ได้รับการปรับปรุงอย่างรวดเร็วของ Ahmad - วิธีเพิ่มฟังก์ชั่นการส่งที่กำหนดเองของเขาก่อนหน้าที่ส่งอื่น ๆ :

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
rooby

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...
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.