ฉันต้องการใช้ Twig Tweak's drupal_view()
เพื่อแสดงมุมมองในเทมเพลตย่อหน้าของฉัน ฉันมีฟิลด์อ้างอิงเอนทิตีสองสามฟิลด์ในย่อหน้า และต้องการ ID ของเอนทิตีที่อ้างอิงผ่านเป็นอาร์กิวเมนต์ตัวกรองตามบริบท
ฉันสร้าง สตริงตัวกรองบริบท ตัวจัดรูปแบบฟิลด์เพื่อจัดรูปแบบสตริงตัวกรองบริบทโดยหวังว่าจะสามารถส่งผ่านเป็นค่าของอาร์กิวเมนต์ได้โดยตรง ตัวจัดรูปแบบจะกลับมา ทั้งหมด
หากฟิลด์อ้างอิงว่างเปล่า มิฉะนั้น จะส่งคืน ID เอนทิตีที่อ้างอิงเป็นสตริงที่มีตัวคั่น AND/OR เช่น 1,2,3
สำหรับ และ หรือ 1+2+3
สำหรับ OR
ภายในเทมเพลตของฉัน ฉันกำลังพยายามแสดงมุมมองด้วยกิ่งไม้ต่อไปนี้:
{% set arg1 = content.field_arg1|แสดงผล %}
{% set arg2 = content.field_arg2|เรนเดอร์ %}
{{ drupal_view('my_view', 'my_display', arg1, arg2) }}
แต่มันไม่ทำงาน!
ตัวแปร arg ของฉันแทนที่จะเป็นสตริง Drupal\Core\Render\มาร์กอัป วัตถุเพื่อให้อาร์กิวเมนต์ไม่ถูกส่งผ่านไปยังมุมมองอย่างถูกต้อง
หลังจากการค้นคว้า ฉันพบว่าฉันสามารถแก้ไขปัญหานี้ได้โดยการกรองตัวแปร arg ของฉันด้วยตัวกรอง php ที่ส่งคืนสตริง ตัวอย่างเช่น การใช้ตัวกรองการตัดแต่งทำงาน:
{% set arg1 = content.field_arg1|render|trim %}
{% set arg2 = content.field_arg2|render|trim %}
{{ drupal_view('my_view', 'my_display', arg1, arg2) }}
ถ้าเป็นไปได้ ฉันต้องการสร้างอาร์เรย์การเรนเดอร์ที่ไม่ต้องใช้ฟุตเวิร์กแฟนซีใดๆ ในเทมเพลตเพื่อส่งค่าไปยัง drupal_view()
การทำงาน. เช่น. อาร์เรย์เรนเดอร์ที่ฉันสามารถผ่านไปได้ content.field_arg1
หรือ content.field_arg|แสดงผล
โดยตรงเป็นข้อโต้แย้ง เป็นไปได้ไหม
Render arrays ที่ฉันได้ลองใช้งานไม่ได้:
$อินไลน์_เทมเพลต = [
'#type' => 'inline_template',
'#template' => '{{ contextual_filter_string }}', // ลองด้วย |trim filter ที่นี่ด้วย
'#บริบท' => [
'contextual_filter_string' => '1+2+3',
]
];
$มาร์คอัพ = [
'#markup' => '1+2+3',
];
$plain_text = [
'#plain_text' => '1+2+3',
];
หมายเหตุ: ที่ไม่แสดงในอาร์เรย์เรนเดอร์ด้านบนคือข้อมูลเมตาแคช (แท็ก) สำหรับเอนทิตีที่อ้างอิงในฟิลด์
ใช่ มีวิธีอื่นในการรับค่าฟิลด์เหล่านี้และส่งต่อไปยัง drupal_view()
แต่นั่นไม่ใช่ประเด็นของคำถามนี้ ฉันต้องการใช้ตัวจัดรูปแบบฟิลด์เพื่อส่งคืนอาร์เรย์เรนเดอร์ (ฉันคิดว่าฉันต้องส่งคืนอาร์เรย์เรนเดอร์) ซึ่งส่งผลให้สตริงพร้อมที่จะส่งผ่านโดยตรงไปยัง drupal_view()
. สิ่งนี้ทำให้ฉันสามารถกำหนดค่ารูปแบบของอาร์กิวเมนต์ใน UI โดยไม่ต้องแตะโค้ด ฉันสงสัยว่านี่เป็นไปไม่ได้
แนวทางอื่นที่ฉันพิจารณา:
- ฉันสามารถประมวลผลย่อหน้าล่วงหน้าและเพิ่มสตริงตัวกรองเหล่านี้ใน
$ตัวแปร
อาร์เรย์
- ฉันสามารถสร้างฟังก์ชันกิ่งไม้ของตัวเองเพื่อสร้างสตริงตัวกรองตามบริบทเหล่านี้
- ฉันสามารถรับค่าได้โดยตรงจากเอนทิตีในเทมเพลตของฉัน เช่น
ย่อหน้า.field_arg1.target_id
ดังที่ Les Lim ตอบ แต่สิ่งนี้ใช้ไม่ได้กับฟิลด์ที่มีหลายค่า
แก้ไข: ดูเหมือนว่าจะเป็นไปไม่ได้ ดังนั้นการยอมรับคำตอบของ Les Lim เป็นทางเลือกที่ดีที่สุด