Score:2

รับโหมดมุมมอง \third_party_settings ของฟิลด์ภายใน hook_preprocess_image_formatter(&$variables) ได้อย่างไร

ธง br

ฉันอยู่ 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 สิ่งที่ฉันทำไปแล้ว:

  1. เพิ่มภายในฟังก์ชันฟิลด์พรีโพรเซส:
    ถ้า (!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"]);
}
leymannx avatar
ne flag
Drupal 7 แต่อาจยังเกี่ยวข้อง: https://drupal.stackexchange.com/a/39508/15055
Score:2
ธง cn

ฉันจะเพิ่มโหมดมุมมองหรือการตั้งค่าบุคคลที่สามให้กับแอตทริบิวต์ของรูปภาพ จากนั้นจะมีให้ในเทมเพลตที่ซ้อนกันทั้งสองแบบ image_formatter และ ภาพ. คุณสามารถลบออกได้หลังจากที่คุณเก็บไว้ในตัวแปรโลคัล หากคุณไม่ต้องการให้แสดงแอตทริบิวต์ แต่โดยปกติไม่มีใครสนใจเกี่ยวกับคุณสมบัติเพิ่มเติม

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา