ฉันจะเปลี่ยนเครื่องมือจัดการการส่งฟอร์มได้อย่างไร


16

ด้วยเหตุผลบางอย่างฉันต้องแทนที่อักขระบางตัว (ถ้ามี) ในทุก ๆ textfields ในรูปแบบใด ๆ ก่อนที่พวกเขาจะถูกเก็บไว้ในฐานข้อมูล กล่าวอีกนัยหนึ่งฉันต้องการตะขอที่ฉันสามารถรับข้อมูลที่ส่งมาทั้งหมดและแทนที่ตัวละครของพวกเขา
ฉันพบวิธีแก้ปัญหานี้:

function hook_form_alter($form, $form_state, $form_id) {
  $form['#submit'] = 'my_custom_submission_function';
}

แต่นี่ไม่ใช่ความคิดที่ดีเพราะฉันต้องดูแลความคืบหน้าของการส่งที่เหลือด้วย ฉันต้องการแทนที่ตัวละครบางตัว มีเบ็ดทำเช่นนี้? การแก้ปัญหาคืออะไร?

คำตอบ:


22

$form['#submit']เก็บอาร์เรย์ของตัวจัดการการส่งฟอร์ม ด้วยรหัสที่คุณให้มาคุณจะเขียนทับมันโดยเพิ่มเฉพาะของคุณเอง ในการรับผลลัพธ์ที่คุณต้องการคุณควรเพิ่มตัวจัดการการส่งเป็นองค์ประกอบแรกในอาร์เรย์ดังนี้:

array_unshift($form['#submit'], 'mymodule_custom_submission');

การได้รับค่าที่ถูกต้องในแบบฟอร์มที่ถูกต้องและการแทนที่อักขระบางตัวอาจเป็นปัญหาใหญ่ในตัวของมันเอง คุณอาจต้องการ จำกัด รูปแบบ / ฟิลด์ที่คุณต้องการเปลี่ยนแปลงเพื่อให้แน่ใจว่าคุณจะไม่ผิดอะไร


2

อาจเป็นการดีกว่าถ้าคุณทำการปรับเปลี่ยนเหล่านี้ในระหว่างการตรวจสอบความถูกต้องแทนที่จะส่งตามที่ Drupal แนะนำ (ดูที่ form_set_value ฟังก์ชั่นที่ https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7 )

ดังนั้นใน hook_form_alter ของคุณคุณสามารถเพิ่มลงในส่วนท้ายของฟังก์ชั่นการตรวจสอบที่มีอยู่หากคุณต้องการ:

$form['#validate'][] = 'mymodule_custom_validation';
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.