Score:1

ฟังก์ชันธีมแบบกำหนดเองสำหรับฟิลด์

ธง in

ฉันต้องการเปลี่ยน hook ของธีมสำหรับหนึ่งฟิลด์จาก FieldFormatter ที่กำหนดเอง การโทรกลับ #theme คือ 'field' แต่ฉันต้องการให้ผู้ใช้มีตัวเลือกในการสลับการตั้งค่าที่เปลี่ยนเป็น 'field_raw' ซึ่งจากนั้นจะใช้เทมเพลต Twig โดยไม่มีมาร์กอัป ฉันคิดท่อนฮุกของธีมไม่ออก

เทมเพลตทวิก:

{%- สำหรับรายการในรายการ %}{{ item.content }}{% endfor -%}

เบ็ดโมดูล:

ฟังก์ชัน mymodule_theme($existing, $type, $theme, $path) {
  กลับ [
    'field_raw' => [
      'items' => NULL,
    ]
  ];
}

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

ฉันยังพยายาม:

'องค์ประกอบการแสดงผล' => 'องค์ประกอบ'
'องค์ประกอบการแสดงผล' => 'องค์ประกอบ'
'render element' => 'เด็ก'
Score:1
ธง cn

ใช้ตะขอฐานฟิลด์

หากเทมเพลตนี้ไม่มีมาร์กอัปควรส่งออกค่าฟิลด์ {{ item.content }} คุณต้องใช้รหัสหลักในการประมวลผลค่าเหล่านี้โดยกำหนด hook ฐาน

ดูตัวอย่าง comment_theme():

/**
 * ใช้ hook_theme()
 */
ฟังก์ชัน comment_theme() {
  กลับ [
    ... 
    'field__comment' => [
      'เบสฮุก' => 'ฟิลด์',
    ]
  ];
}

ในกรณีนี้ การเริ่มต้นชื่อ hook ของธีมด้วย hook พื้นฐานนั้นยังไม่เพียงพอ แต่ยังต้องมีเครื่องหมายขีดล่าง: field__raw.


การใช้ hook ของธีมที่กำหนดเอง

ไม่แนะนำ เพื่อการสาธิต คุณสามารถคัดลอกโค้ดหลักที่เกี่ยวข้องไปยังเทมเพลตของคุณเอง:

mymodule.โมดูล:

ฟังก์ชัน mymodule_theme($existing, $type, $theme, $path) {
  กลับ [
    'field_raw' => [
      'องค์ประกอบการแสดงผล' => 'องค์ประกอบ',
    ]
  ];
}

ฟังก์ชัน template_preprocess_field_raw(&$ตัวแปร, $hook) {
  $องค์ประกอบ = $ตัวแปร['องค์ประกอบ'];
  $ตัวแปร['รายการ'] = [];
  $เดลต้า = 0;
  ในขณะที่ (!empty($element[$delta])) {
    $variables['items'][$delta]['content'] = $element[$delta];
    $เดลต้า++;
  }
}

ในกรณีนี้ คุณสามารถเลือกชื่อแบบสุ่มสำหรับ hook ของธีมได้ แต่ต้องไม่ขึ้นต้นด้วย สนาม__.

เปลี่ยนไปใช้เทมเพลตนี้ในฟอร์แมตฟิลด์ที่กำหนดเอง:

  มุมมองฟังก์ชันสาธารณะ (FieldItemListInterface $items, $langcode = NULL) {
    $elements = parent::view($items, $langcode);
    ถ้า (isset($elements['#theme'])) {
      $elements['#theme'] = 'field_raw';
    }
    ส่งคืนองค์ประกอบ $;
  }

และสุดท้ายวางเทมเพลตขั้นต่ำในโฟลเดอร์โมดูล

mymodule/templates/field-raw.html.twig

{%- สำหรับรายการในรายการ %}{{ item.content }}{% endfor -%}

โพสต์คำตอบ

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