วิธีการใช้ตัวจัดรูปแบบฟิลด์สำหรับคุณสมบัติเอนทิตี


16

ฉันสร้างที่กำหนดเองนิติบุคคลใช้Entity APIที่มีคุณสมบัติบางอย่างที่กำหนดไว้ในhook_schema()และประกาศในentityPropertyInfo(), EntityDefaultMetadataControllerการขยายชั้นเรียน

จนถึงตอนนี้ดีมาก

ตอนนี้ผมต้องการให้ผู้ใช้สามารถปรับแต่งถ้าและวิธีการคุณสมบัติเหล่านี้ได้แสดงเมื่อดูหน่วยงานดังนั้นผมจึงดำเนินการhook_field_extra_fields ()และประกาศให้พวกเขา

จากนั้นในการควบคุมของฉันซึ่งทอดตัวEntityAPIControllerฉันเพิ่มคุณสมบัติไปยังอาร์เรย์ $ เนื้อหาในbuildContent()ขณะที่ระบุไว้ที่นี่

มันใช้งานได้ค่อนข้างดีและมีการแสดงคุณสมบัติและเคารพการสั่งซื้อและการมองเห็นใน "จัดการจอแสดงผล"

อย่างไรก็ตามฉันไม่สามารถหาวิธีเพิ่มการตั้งค่าใน Manage Display เพื่อปรับแต่งการวางตำแหน่งฉลาก ( inline/above/hidden) และที่สำคัญกว่านั้นคือวิธีระบุ formatters แบบกำหนดเองสำหรับคุณสมบัติเหล่านี้

เบาะแสใด ๆ


1
คุณสมบัติยังสนับสนุนฟอร์แมตเตอร์หรือไม่? เนื่องจาก "โหนด" ไม่มี "ชื่อ" ใต้ "จัดการจอแสดงผล" การคาดเดาครั้งแรกของฉันจะไม่ใช่ +1 สำหรับคำถามที่ดี
Letharion

คุณสมบัติเอนทิตีไม่รองรับตัวจัดรูปแบบไม่ คุณจะต้องใช้กลไกทั้งหมดนั้นเอง
Clive

ฉันกลัวว่าเป็นเช่นนั้น
อเล็กซ์เวเบอร์

คำตอบ:


7

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


1
Entity อสังหาริมทรัพย์สนามโมดูลเป็นอีกหนึ่งจุดเริ่มต้นสำหรับวิธีการนี้
andrewmacpherson

1

ที่คุณสามารถดูในfield_ui_display_overview_formในmodules/field_ui/field_ui.admin.incหน้าDisplay settingจะเต็มไปด้วย$instancesและ$extra_fields:

$instances = field_info_instances($entity_type, $bundle);
$field_types = field_info_field_types();
$extra_fields = field_info_extra_fields($entity_type, $bundle, 'display');

ในฟังก์ชั่นนี้มีสองลูปซึ่งสร้างหน้า:

foreach ($instances as $name => $instance) {
   ...
}

และ

foreach ($extra_fields as $name => $extra_field) {
   ...
}

และเฉพาะในลูปแรกที่วนซ้ำในฟิลด์ที่มีตัวเลือกสำหรับlabelและformatter

ดังนั้นหากคุณต้องการฟังก์ชั่นนี้ในคุณสมบัติของคุณ (ตามที่ @Clive กล่าว):

คุณจะต้องใช้กลไกทั้งหมดนั้นเอง

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