ฉันกำลังพยายามที่จะใช้ฟิลด์รูปภาพอ้างอิงโหนดบนเว็บไซต์ Drupal 7 ของฉันที่จะเปลี่ยนเป็น 'โหมดดู' ขึ้นอยู่กับตรรกะของโปรแกรมก่อนที่จะเรนเดอร์ ขณะนี้ฟิลด์กำลังแสดงผลในประเภทเนื้อหาจำนวนมากผ่านการตั้งค่าโหมดการแสดงผลซึ่งแต่ละประเภทกำลังใช้ฟอร์แมตฟิลด์ 'โหนดการแสดงผล'
ความพยายามครั้งแรก
ความคิดแรกของฉันคือการใช้สิ่งต่อไปนี้โดยพิจารณาจาก hook คือ hook คือ hook:
function HOOK_field_formatter_view( $entity_type, $entity, $field ... ){
switch ($display['type']) {
case 'node_reference_node':
/* Programatical logic here to modfy field render settings */
break;
}
}
เห็นได้ชัดว่าการแลกเปลี่ยน HOOK สำหรับชื่อโมดูลของฉัน
มันไม่ได้เรื่องจริงๆถ้าข้างต้นจะยิงก่อนหรือหลังฟังก์ชั่นเดิมnode_reference_field_formatter_view
ในnode_reference.module
เพราะผมอาจจะแทนที่ของการส่งออกทั้งหมดหรือหวังว่าปรับเปลี่ยนค่าก่อนการแสดงผล ปัญหาเพียงอย่างเดียวคือตะขอข้างต้นดูเหมือนว่าจะทำงานได้เฉพาะในโมดูลต่อ - คือมันไม่ได้ทั่วทั้งไซต์ดังนั้นโดยทั่วไปจะไม่ทำงานสำหรับโมดูลของฉัน
ตอนนี้เห็นได้ชัดว่าฉันสามารถเขียนตัวจัดรูปแบบฟิลด์ของฉันเองเพื่อแสดงผลโหนดที่แสดงผลได้ แต่ดูเหมือนขยะเมื่อพิจารณาว่ามีอยู่แล้ว
แนวทางอื่น ๆ
วิธีการอื่น ๆ ของฉันเคยเป็นHOOK_preprocess_node
และHOOK_preprocess_field
แต่ก่อนหน้านี้ไม่มีview_mode
ข้อมูลใด ๆและหลังมีโครงสร้างที่ซับซ้อนแตกต่างกันอย่างน้อย 5 อย่างที่ทุกคนมีการอ้างอิงถึงview_mode
สถานที่ให้บริการในระดับที่แตกต่างกัน - และรู้สึกว่าค่อนข้างแฮ็ค ค่า แม้ว่าฉันจะเปลี่ยนview_mode
คุณสมบัติบางอย่างรูปภาพก็ไม่เปลี่ยน
คำถาม
ไม่มีใครรู้วิธีที่สะอาดในการก้าวต่อหน้าฟอร์แมตเตอร์ฟิลด์ (ของโมดูล contrib) และเปลี่ยนการตั้งค่าตามการร้องขอต่อหน้า - นั่นคือโดยไม่ต้องเปลี่ยนการตั้งค่าโหมดมุมมองถาวรของประเภทเนื้อหาจริงหรือไม่?
view_mode
ในhook_preprocess_node
ฉันโง่! ฉันสงสัยว่าอะไรเช่นhook_field_formatter_view_alter()
นี้มีอยู่ใน D8 ...
hook_field_formatter_view_alter()
หรือคล้ายกันมานานกว่าหนึ่งปีในขณะนี้มันก็ไม่ได้อยู่อย่างน่าเสียดาย FYIhook_preprocess_node()
แน่นอนไม่ได้view_mode
ใช้ได้กับมันใน$vars['view_mode']
ไม่$vars['node']->view_mode
ที่คุณอาจได้รับการล่อลวงเพื่อพยายาม