ฉันอยู่ D9
ฉันได้เพิ่มตัวเลือกที่กำหนดเองให้กับตัวจัดรูปแบบฟิลด์รูปภาพดังต่อไปนี้ แนวทาง Drupal
ในการประมวลผลล่วงหน้าของฟิลด์ ฉันสามารถรับการตั้งค่าที่ฉันสร้างขึ้น:
ฟังก์ชัน my_module_preprocess_field(&$ตัวแปร) {
ถ้า (ตัวแปร $["องค์ประกอบ"]["#formatter"] === 'รูปภาพ') {
$entity = $ตัวแปร['องค์ประกอบ']['#วัตถุ'];
$view_mode = $ตัวแปร['องค์ประกอบ']['#view_mode'];
$field_name = $ตัวแปร['องค์ประกอบ']['#field_name'];
$entity_display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
$field_display = $entity_display->getComponent($field_name);
$variables['my_settings'] = isset($field_display["third_party_settings"]["my_module"]["my_settings"]) && $field_display["third_party_settings"]["my_module"]["my_settings"];
}
}
อย่างไรก็ตาม field.html.twig
ไฟล์ไม่ดีสำหรับความต้องการของฉัน: ฉันต้องส่งการตั้งค่านี้ไปยังไฟล์ image-formatter.html.twig
ไฟล์เพราะฉันต้องวางไฟล์ แผนก
ทันทีหลังจากที่ img
แท็กและไม่อยู่นอก ก
.
ขออภัย ฉันไม่สามารถรับข้อมูลดังกล่าวในการประมวลผลล่วงหน้าของตัวจัดรูปแบบรูปภาพได้ เนื่องจากฉันไม่สามารถหาวิธีรับโหมดมุมมองได้:
ฟังก์ชัน my_module_preprocess_image_formatter(&$ตัวแปร) {
$item = $ตัวแปร['item'];
$entity = $item->getEntity();
$field = $item->getFieldDefinition();
// วิธีรับ view_mode \ the third_party_settings
$entity_display = EntityViewDisplay::collectRenderDisplay($เอนทิตี, $missing_view_mode);
}
เป็นไปได้ไหม?
แก้ไข:
ขอบคุณคำตอบ 4k4 สิ่งที่ฉันทำไปแล้ว:
- เพิ่มภายในฟังก์ชันฟิลด์พรีโพรเซส:
ถ้า (!empty($variables['items'])) {
foreach ($variables['items'] เป็น &$item) {
$item['content']['#item_attributes']['my_settings'] = $my_settings;
}
}
แล้วเพิ่ม ก ฟังก์ชันประมวลผลภาพล่วงหน้า เพื่อให้ข้อมูลนั้นเป็นตัวแปรและไม่ใช่แอตทริบิวต์ - เป็นการตั้งค่ามากกว่าความจำเป็นที่เข้มงวด
ฟังก์ชัน my_module_preprocess_image(&$ตัวแปร) {
$variables['my_settings'] = $variables["attributes"]["my_settings"] ?? เท็จ;
unset($variables["attributes"]["my_settings"]);
}