ฉันจะค้นหารหัสประจำตัวของแบบฟอร์มได้อย่างไร


22

ฉันจะรับรหัสแบบฟอร์มของแบบฟอร์มของฉันได้อย่างไร ฉันเพิ่งเริ่มสร้างโมดูลของฉันและฉันหยุดนิ่ง ฉันได้รับรหัสนี้จากคนอื่นและกำลังพยายามปรับแต่งมัน:

function hook_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'the form id for the node form') {
    $form['#submit'][] = 'my_custom_submit_handler';
  }
}

2
สำเนาซ้ำที่เป็นไปได้: drupal.stackexchange.com/questions/5605/…
Laxman13

โปรดดูคำตอบของคำถามข้างต้นและควรตอบคำถามของคุณด้วย
Laxman13

1
คำถามที่นี่แตกต่างกันมาก ก็ไม่ได้ถามถึงวิธีการระบุองค์ประกอบรูปแบบ hook_form_alter()แต่ที่เป็นรหัสแบบฟอร์มที่ควรจะตรวจสอบในการดำเนินการ ด้วยรหัสที่รายงานฉันจะบอกว่าคำถามนี้แตกต่างกัน
kiamlaluno

คำตอบ:


17

ลองพิมพ์ตัวแปรแบบฟอร์มที่มีฟังก์ชั่น PHP print_r

function hook_form_alter(&$form, &$form_state, $form_id) {
  print_r($form);
}

เมื่อคุณเยี่ยมชมหน้าเว็บที่อยู่ในรูปแบบตัวแปร (และชื่อ) จะปรากฏขึ้น

เป็นวิธีที่ง่ายในการเข้าถึง (หรือมากกว่าการดู) ข้อมูลที่จะใช้DPM ()ฟังก์ชั่นให้โดยโมดูล Devel คุณสามารถใช้มันในแบบเดียวกับที่คุณจะใช้ print_r


1
รับรหัสที่รายงานไม่จำเป็นต้องดูเนื้อหาของ$formตัวแปร
kiamlaluno

10
$ form_id เป็นพารามิเตอร์ที่คุณสามารถพิมพ์ได้โดยตรง !!
niksmac

1
หากคุณเปิดใช้งานDevelเพียงdpm($form_id);
ไม่มี Sssweat

35

ค้นหา FORM ID โดยไม่ต้องติดตั้งโมดูล

การค้นหา Form ID นั้นง่ายมากโดย ไม่จำเป็นต้องติดตั้งโมดูลและทั้งหมด

ขั้นตอนที่ 1:เปิดคุณจากไปที่หน้าแก้ไข (หรือตรวจสอบแบบฟอร์มของคุณ)

ขั้นตอนที่ 2:หากรูปแบบโหนดพบ " รูปแบบโหนด " ในองค์ประกอบการตรวจสอบ

การค้นหา id ของแบบฟอร์มตรวจสอบว่าคุณอยู่ในองค์ประกอบของแบบฟอร์ม

ขั้นตอนที่ 3:ดูรูปภาพที่แนบมาข้อความสีเขียวที่ไฮไลต์คือ ID ของแบบฟอร์ม

ขั้นตอนที่ 4: สิ่งสำคัญในที่สุดหากคุณต้องการใช้ในการhook_form_alter()แทนที่hypenด้วยการขีดเส้นใต้

ตัวอย่างเช่น: yourform_id_with_content_type_name_form

เช่นเดียวกับที่ชาญฉลาดคุณสามารถค้นหา id ของฟอร์มใด ๆ ใน drupal ทั้งหมดที่คุณต้องทำคือตรวจสอบ -> ค้นหาองค์ประกอบของฟอร์มและค้นหาแอตทริบิวต์ ID และใช้งาน

หวังว่าจะช่วย :)


1
สิ่งนี้ไม่ได้ผลสำหรับฉันเมื่อฉันต้องการปกป้องแบบฟอร์มความคิดเห็นในไซต์ Drupal 8 ฉันพบวิธีแก้ปัญหาในความคิดเห็นนี้ใน drupal.orgที่มันบอกว่า: 1) ค้นหาองค์ประกอบอินพุตที่ซ่อนซึ่งมีnameแอตทริบิวต์มีค่า "form_id" 2) ดูvalueแอตทริบิวต์ขององค์ประกอบการป้อนข้อมูล- ค่าของแอตทริบิวต์คือรหัสแบบฟอร์มที่ต้องการ ตัวอย่าง: รูปแบบความคิดเห็นบนโหนดเรื่องมี ID ของฟอร์ม "comment_comment_node_story_form" ถ้าคุณชอบคุณสามารถรวมข้อมูลใหม่นี้ในคำตอบของคุณ
herzbube

10

หากเว็บฟอร์มของคุณอยู่ที่ "www.mydomain.com/node/351" รหัสประจำตัวของคุณจะเป็น "webform_client_form_351" ดังนั้นอะไรก็ตาม nid ของคุณคือ - นั่นคือรหัสประจำตัว


2
คำถามไม่เกี่ยวกับโมดูล Webform มันเป็นเรื่องเกี่ยวกับรูปแบบการแก้ไขโหนด
kiamlaluno

คำถามเกี่ยวกับแบบฟอร์มการแก้ไขโหนด แต่ถ้าคุณต้องการค้นหา ID ของฟอร์มเว็บฟอร์มใด ๆ ก็ใช้งานได้ถูกต้อง
herci

คำตอบนี้ถูกต้องแค่ทดสอบ
vicenteherrera

6

หากคุณรู้ว่ารหัสอยู่ที่ไหนซึ่งกำหนดแบบฟอร์มที่คุณต้องการแก้ไขให้ดูที่นั่น id ของฟอร์มเป็นเพียงชื่อของฟังก์ชันที่กำหนดฟอร์มนั้น

ตัวอย่างเช่นมุมมองกำหนดฟังก์ชั่น views_ui_edit_view_form ในบรรทัดที่ 875 ของมุมมอง / include / admin.inc ตัวกรองมุมมองลำดับชั้นการเลือกค้นหารูปแบบ id นั้นในบรรทัดที่ 50 ของ hierarchical_select / modules / hs_taxonomy_views.module ในฟังก์ชัน hood_form_alter


4

ใช้drupal_set_message()ฟังก์ชั่นเพื่อแสดงรหัสแบบฟอร์ม

function hook_form_alter(&$form, $form_state, $form_id) {
drupal_set_message($form_id);
// other codes
}

4

ใช้โมดูลรับแบบฟอร์ม IDเพื่อค้นหา form id ของฟอร์มใด ๆ ใน Drupal ได้อย่างง่ายดาย

นี่คือคำพูดเกี่ยวกับมันจากหน้าโครงการ:

โดยการโฮเวอร์เหนือแบบฟอร์มใด ๆ คุณจะเห็นลิงค์ของบริบท โดยการขยายการเชื่อมโยงคุณจะเห็นรหัสแบบฟอร์ม คลิกที่ลิงค์แล้วคุณจะเห็นหน้าต่างโมดัลพร้อมรหัสรูปแบบที่คัดลอกได้และ hook_form_FORM_ID_alter () ข้อเสนอแนะเบ็ด

โมดูลนี้เลิกใช้แล้ว มันได้รับการปรับปรุงขยายและแบรนDevel รูปแบบการแก้ปัญหา ; ใช้มันแทน

การเปิดเผยข้อมูล: ฉันเป็นผู้ดูแลโมดูลเหล่านี้


3

เนื่องจากรหัสที่คุณรายงานกำลังมองหา ID ของฟอร์มของฟอร์มโหนดมีสองกรณี

Drupal 6

หากรหัสพยายามแก้ไขฟอร์มที่ใช้เพื่อตั้งค่าการตั้งค่าสำหรับประเภทเนื้อหาก็ควรใช้คำสั่ง IF ต่อไปนี้

if ($form_id == 'node_type_form' && isset($form['identity']['type'])) { /* … */ }

หากรหัสพยายามแก้ไขรูปแบบการแก้ไขโหนดรหัสควรใช้คำสั่ง IF ต่อไปนี้

if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] . '_node_form' == $form_id) { /* … */ }

Drupal 7 และสูงกว่า

ในกรณีแรกคำสั่ง IF ควรเป็นสิ่งต่อไปนี้:

if ($form_id == 'node_type_form') { /* … */ }

ใช้วิธีการอื่นโดยสมมติว่า mymodule เป็นชื่อย่อของโมดูลของคุณคุณสามารถmymodule_form_node_type_form_alter(&$form, &$form_state, $form_id)ใช้ได้ ตั้งแต่ Drupal 7 hooks ทั้งหมดที่ใช้ในการเปลี่ยนแบบฟอร์มที่นำมาใช้โดยโมดูลอื่นจะได้รับ$form_idเป็นพารามิเตอร์สุดท้าย ดูhook_form_alter () , hook_form_FORM_ID_alter () , hook_form_BASE_FORM_ID_alter ()

ในกรณีที่สองคำสั่ง IF นั้นเหมือนกับ Drupal 6

if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] . '_node_form' == $form_id) { /* … */ }

1

ขั้นแรกให้ติดตั้งโมดูล Devel จากนั้นสร้างโมดูลเช่นรหัสด้านล่าง

function hook_form_alter(&$form, &$form_state, $form_id) {
  dpm($form);
}

จากนั้นคุณสามารถดูรายละเอียดทั้งหมดของฟอร์มเช่น ID ฟอร์มชื่อฟิลด์ของฟอร์มเป็นต้น

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