Score:0

แคชใดที่ฉันควรใช้ไม่ได้ในบล็อกปลั๊กอินที่สร้างอาร์เรย์แสดงผลสำหรับหนึ่งมุมมองขึ้นไป

ธง in

ปัญหาที่แท้จริงคือบางครั้งปลั๊กอินจะส่งคืนอาร์เรย์การเรนเดอร์ที่เป็นบล็อกแยกที่แสดงจากมุมมองเดียวกัน และอาจมีอาร์กิวเมนต์ที่แตกต่างกันด้วย สิ่งที่ฉันค้นพบคือในกรณีเหล่านี้ อาร์เรย์เรนเดอร์ชุดแรกจะถูกแคชเพื่อให้การแสดงผลที่ตามมาเหมือนกันกับชุดเริ่มต้น ฉันกำลังสร้างอาร์เรย์เรนเดอร์ด้วย buildRenderable($display_id, $args, FALSE)ซึ่งจะปิดใช้งานการแคชแท็กและคีย์ แต่ฉันไม่ชัดเจนว่าจะระบุบริบทแคชที่กำหนดเองด้วยตนเองได้อย่างไรโดยไม่มีคำขอที่แตกต่างกัน

4uk4 avatar
cn flag
สิ่งนี้เกี่ยวข้อง https://drupal.stackexchange.com/questions/307728/render-view-inside-block-with-caching กลยุทธ์ที่ดีที่สุดสำหรับบริบทแคชที่กำหนดเองของคุณขึ้นอยู่กับจำนวนรูปแบบที่บริบทนี้กำลังสร้าง
steve avatar
in flag
I've seen the issue you referenced, could you elaborate on what you mean in your comment @4uk4?
Score:1
ธง cn

แต่ฉันไม่ชัดเจนว่าจะให้บริบทแคชที่กำหนดเองด้วยตนเองได้อย่างไร โดยไม่มีคำขอเปลี่ยนแปลง

มีสามกลยุทธ์:

  1. เพิ่มบริบทแคชที่กำหนดเองไปยังอาร์เรย์การแสดงผล จากนั้นบริบทแคชจะขยายไปยังบล็อกและเพจที่เพิ่มรูปแบบต่างๆ ในแต่ละระดับอัปสตรีม

  2. เพิ่มตัวสร้างขี้เกียจและตั้งค่าคุณสมบัติ #create_placeholder. จากนั้นบริบทแคชที่กำหนดเองจะไม่เกิดฟองอากาศอีกต่อไปแทนที่บล็อกและหน้าแคชจะมีตัวยึดตำแหน่งซึ่งจะถูกแทนที่ด้วยเนื้อหาที่สร้างขึ้นอย่างเกียจคร้านในภายหลังเมื่อมีการส่งหน้าที่แคช

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

ใช้ตัวเลือกแรกสำหรับบริบทแคชที่ไม่มีรูปแบบมากเกินไป ตัวเลือกที่สองนั้นใช้ความพยายามมากกว่าเล็กน้อย เนื่องจาก Drupal 8.8 คุณต้องมีคลาสเพิ่มเติม การใช้ TrustedCallbackInterface หรือ RenderCallbackInterfaceแต่มีความยืดหยุ่นมากกว่าในการกำหนดเนื้อหาแบบสแตติกและไดนามิก แม้จะอยู่ในบล็อกเดียวกัน ง่ายกว่าคือตัวเลือกที่สาม ใช้ตัวเลือกนี้หากเนื้อหาของบล็อกมีความผันผวนมากจนการแคชไม่คุ้มกับความพยายาม

steve avatar
in flag
เหมาะสมหรือไม่ที่ตัวแปร `content' ในเทมเพลตมีอาร์เรย์เรนเดอร์สองชุดที่แตกต่างกัน
4uk4 avatar
cn flag
Yes, often you use containers to separate them in a renderable structure which is also themable. See https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21Element%21Container.php/class/Container
steve avatar
in flag
I guess what I was asking is, the `content` variable in the template contains the _correct_ render arrays, using the discrete view display ids. However, they are not in the end rendered as distinct, which is the problem I'm having. I'm simply rendering the `content` with `{% for value in content %} {{ value }} {% endfor %}`.
4uk4 avatar
cn flag
Normally the variable name `content` in a Drupal template is a render array rendered recursively like any other render array without assuming a specific structure. If you have control on both ends of the variable you could make such assumptions, but I wouldn't do this. If someone else is not aware of that and deletes the customized block template or switches to a different theme not containing this template things will break.
4uk4 avatar
cn flag
If you need to render separate variables then add a custom template to your module for the inside and use the block template to theme the outside of the block if necessary.
steve avatar
in flag
I think I'm probably not being clear. What we're discussing is a custom module, with a block plugin class that returns one or more view blocks as render arrays in the `build` method. These render arrays are themed in a custom block template in the module. My question in these comments about the `content` variable that is passed to the template is this: Does it makes sense, with regard to the issue I'm having with render array caching, to have the _correct_, distinct render arrays passed to the template, which are still nevertheless being finally being incorrectly rendered as the same?
4uk4 avatar
cn flag
We are discussing the same, the difference is that I'm suggesting these render arrays are themed in a custom template which is not a block template. See https://www.drupal.org/docs/theming-drupal/twig-in-drupal/create-custom-twig-templates-for-custom-module#s-step-33-render-as-part-of-another-plugin-such-as-block.
steve avatar
in flag
ให้เรา [ดำเนินการสนทนาต่อในการแชท](https://chat.stackexchange.com/rooms/135849/discussion-between-steve-and-4uk4)
Score:0
ธง in

ในท้ายที่สุด ฉันไม่สามารถรับคำแนะนำเหล่านี้ทั้งหมด รับอาร์เรย์แรกไม่ใช่แคช นี่อาจเป็นเพราะความบกพร่องในกระบวนการของฉัน แต่ในที่สุดฉันก็ใช้มุมมองแยกสองมุมมองแทนที่จะพยายามทำให้อาร์เรย์แตกต่างกันไปตาม ID การแสดงผลสำหรับมุมมองเดียว

โพสต์คำตอบ

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