เหตุใดวิดเจ็ตฟิลด์จึงไม่รวมองค์ประกอบ


11

องค์ประกอบของแบบฟอร์มมักจะแยกจากวิดเจ็ตฟิลด์ แต่ก็ใช้งานฟังก์ชันที่คล้ายกันมาก

บางครั้งการทำงานของพวกเขาก็คืบคลานข้ามทั้งสอง apis เช่นในคำถามนี้: การแสดงฟอร์ม Field Widget Form ที่ทำงานด้วยตัวเองเป็นไปได้หรือไม่?

มันดูเหมือนว่าตรรกะกับผมว่าสนามวิดเจ็ตได้หรือไม่ว่าจะเป็นองค์ประกอบฟอร์มที่ยังเกิดขึ้นกับแผนที่โดยตรงกับการจัดเก็บพื้นฐานโดยเฉพาะอย่างยิ่งตั้งแต่รูปแบบ API ที่มีอยู่แล้วในสถานที่เมื่อข้อมูล API มาเกี่ยวกับ

ฉันสงสัยว่าทำไมถึงไม่เป็นเช่นนั้น

แก้ไข: ตามที่ kiamlaluno ชี้ไว้ด้านล่างตามเอกสารอย่างเป็นทางการวิดเจ็ตเป็นองค์ประกอบของแบบฟอร์ม API ซึ่งหมายความว่าฉันต้องแก้ไขคำถามของฉันเล็กน้อย

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

หากวิดเจ็ตถูกประกาศเป็น

function hook_widget_info() {
  return array('my_widget' => array(
    'base element' => 'some_form_element_machine_name',
  ))
}

ดังนั้นนิยามองค์ประกอบจะแยกจากวิดเจ็ตเพื่อให้สามารถใช้ได้ทั้งสองวิธี แต่ขณะนี้ไม่ใช่กรณี

แก้ไข 2: เปิด คำขอคุณสมบัติแล้ว


ใน Drupal 8 ตอนนี้วิดเจ็ตถูกนำไปใช้กับคลาส วิดเจ็ตฐานเป็นหลักคลาสที่ได้รับคลาสวิดเจ็ต
kiamlaluno

คำถามที่คล้ายกันจะเป็น "ทำไมแท็กซี่ถึงไม่ใช่รถยนต์" หรือ "ทำไมถนนถึงไม่ใช่ชิ้นส่วนของยางมะตอย" หรือ "ทำไมหนังสือถึงไม่ใช่นวนิยาย?" หนังสือสามารถเป็นนวนิยายได้ แต่นวนิยายเล่มเดียวกันสามารถมีอยู่ในที่จัดเก็บข้อมูลดิจิทัลได้ หรืออาจอยู่ในหนังสือที่ใหญ่กว่าพร้อมกับนวนิยายอื่น ๆ หนังสือแม้ว่าจะมีนวนิยายหนึ่งเล่ม แต่มีคุณสมบัติทางกายภาพบางอย่างที่เป็นอิสระจากเนื้อหา
donquixote

คำตอบ:


11

ดูเหมือนว่าฉันมีเหตุผลที่วิดเจ็ตภาคสนามอาจเป็นองค์ประกอบของรูปแบบที่เกิดขึ้นกับแผนที่โดยตรงกับที่เก็บข้อมูลพื้นฐานบางส่วน

วิดเจ็ตเป็นองค์ประกอบของรูปแบบ พวกเขามีความสามารถเพิ่มเติมที่องค์ประกอบของฟอร์มไม่มี เอกสารเกี่ยวกับวิดเจ็ตฟิลด์ APIอธิบายวิดเจ็ตโดยใช้คำต่อไปนี้:

วิดเจ็ตเป็นองค์ประกอบของForm APIพร้อมความสามารถในการประมวลผลเพิ่มเติม ตะขอ Widget มักจะเรียกได้ว่าเป็นสนามแนบ API ในระหว่างการสร้างรูปแบบของโครงสร้างข้อมูลที่มีfield_attach_form ()

วิดเจ็ตทุกตัวถูกนำไปใช้โดยใช้องค์ประกอบของฟอร์มอย่างน้อยหนึ่งองค์ประกอบ แต่โมดูลที่ใช้วิดเจ็ตนั้นจำเป็นต้องใช้ hooks บางตัวที่ไม่ต้องการจากองค์ประกอบของฟอร์ม:

ในขณะที่แรกสามารถพิจารณาเทียบเท่าของhook_element_info ()อีกสองเป็น hooks เพิ่มเติมที่จำเป็นสำหรับเครื่องมือในการทำงาน ต้องขอบคุณข้อมูลที่ส่งผ่านไปยังhook_field_widget_form()วิดเจ็ต

Drupal อาจใช้วิดเจ็ตที่ขยายคุณสมบัติที่ส่งคืนจากhook_element_info()แต่ความจริงก็คือวิดเจ็ตและองค์ประกอบของฟอร์มเป็นสองสิ่งที่แตกต่างกันซึ่งใช้ในกรณีที่แตกต่างกัน พิจารณาวิดเจ็ตเป็นองค์ประกอบแบบฟอร์มประเภทพิเศษ
หากhook_element_info()ใช้เพื่อส่งคืนข้อมูลเกี่ยวกับวิดเจ็ตรหัสที่ค้นหาวิดเจ็ตจะต้องกรององค์ประกอบของฟอร์มเพื่อเก็บข้อมูลวิดเจ็ต ในทางกลับกันโค้ดที่กำลังมองหาองค์ประกอบของฟอร์มควรกรองข้อมูลวิดเจ็ต พิจารณาว่าจำเป็นต้องใช้ข้อมูลมากน้อยเพียงใดจึงเป็นเหตุผลว่าทำไมจึงจำเป็นต้องใช้ hooks สองตัวที่แตกต่างกัน

Drupal จะได้ใช้สถานที่ให้บริการ "ฐานองค์ประกอบ" hook_field_widget_info()กลับมาจาก หากทรัพย์สินดังกล่าวยังไม่ได้รับการดำเนินการก็หมายความว่าไม่มีใครเสนอมันหรือได้รับการเสนอ แต่มันก็มีประโยชน์ในบางกรณีที่ จำกัด

สำหรับ Drupal 8 สิ่งที่เปลี่ยนแปลงเล็ก ๆ น้อย ๆ และองค์ประกอบของแบบฟอร์มเป็นวัตถุของการเรียนการดำเนินการในขณะที่วิดเจ็ตฟิลด์เป็นวัตถุของการเรียนการดำเนินการFormElementInterface WidgetInterfaceอินเทอร์เฟซที่ใช้ร่วมกันระหว่างอินเทอร์เฟซเหล่านั้นคือPluginInspectionInterfaceซึ่งไม่ได้กำหนดวิธีการใด ๆ สำหรับการแสดงผลองค์ประกอบแบบฟอร์มซึ่งถูกกำหนดแทนจากRenderElementคลาสนามธรรม
ตั้งแต่ตอนนี้วิดเจ็ตถูกนำไปใช้กับคลาสวิดเจ็ตฐานจึงเป็นคลาสพื้นฐานที่คลาสคลาสได้รับมา ไม่จำเป็นต้องมีคุณสมบัติเพื่อกำหนดวิดเจ็ตฐานของวิดเจ็ต


น่าสนใจมากฉันไม่รู้เรื่องนี้ +1 อย่างไรก็ตามฉันได้อัปเดตคำถามของฉันเมื่อคุณทำให้ฉันสับสนมากขึ้น)
Letharion

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