Score:0

ภายในเทมเพลตโหนด ฉันจะบอกได้อย่างไรว่าภูมิภาคใดถูกใช้งาน/ถูกครอบครอง?

ธง kr

ฉันกำลังพยายามสร้างฟังก์ชันการประมวลผลล่วงหน้าในไฟล์ .theme ของฉันเพื่อให้ตัวแปรพร้อมใช้งานสำหรับเทมเพลตโหนด

ฉันต้องการให้ตัวแปรมีเพียงชื่อของภูมิภาคทั้งหมดที่ใช้งานอยู่ในปัจจุบัน (เช่น การแสดงเนื้อหา)

แนวคิดคือ ถ้าฉันมีขอบเขตชื่อ left_hand_nav ซึ่งแสดงผลในบางหน้า (ไม่ใช่ทั้งหมด) และฉันมีโหนดชื่อ generic_page จากเทมเพลตโหนด generic_page ของฉัน ฉันอยากจะทำได้:

{% ถ้า left_hand_nav %}
 ทำอะไรสักอย่าง
{% อื่น %}
 ทำอย่างอื่น
{% เอนดิฟ %}

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

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

ถ้ามีใครชี้ทางที่ถูกต้องให้ฉันได้ ฉันจะขอบคุณมาก

sonfd avatar
in flag
คุณกำลังพูดถึงว่าภูมิภาคในเทมเพลต page.html.twig ของคุณมีเนื้อหาหรือไม่ เช่น ภูมิภาคที่กำหนดในไฟล์ .info.yml ของธีมของคุณ
abe-cedarian avatar
kr flag
@sonfd ใช่ แต่ฉันต้องการทราบจากภายในเทมเพลตโหนด
ru flag
ฉันสามารถเห็นแรงจูงใจสำหรับสิ่งนี้จากมุมมองของนักพัฒนาส่วนหน้า แต่สถาปัตยกรรมของ Drupal (การแคชเอนทิตี, BigPipe,...) ทำให้การทำงานนี้ยากมากแม้จะเชื่อถือได้ครึ่งทางก็ตาม ฉันเกรงว่าจะไม่มีทาง *ถูกต้อง* สำหรับสิ่งนี้
Score:1
ธง cn

ในกรณีพิเศษของการนำทางไปยังหน้าโหนด (เช่น เมื่อดูบทความ) คุณจะเห็นว่าเมื่อใช้งาน hook_preprocess_page $variables จะมีค่า 'node' หากคุณเพิ่มคุณสมบัติใดๆ ให้กับ $variables['node'] ของคุณ คุณจะสามารถใช้งานได้ในไฟล์ node.html.twig

อัปเดต

เช่นเดียวกับใน hook_preprocess_page คุณสามารถเข้าถึงทุกภูมิภาคโดยใช้ $variables['REGION_NAME'] เพื่อให้คุณตรวจสอบได้ว่าว่างหรือมีเนื้อหาหรือไม่ หากไม่ว่าง คุณสามารถบันทึกชื่อในอาร์เรย์แล้วใช้อาร์เรย์นั้น เป็น $variables['node']

4uk4 avatar
cn flag
คุณไม่สามารถตั้งค่าคุณสมบัติใน $variables['node'] วัตถุโหนดถูกแคชแบบคงที่และตัวแปรทั้งหมดที่อ้างถึงวัตถุนี้ใช้อินสแตนซ์เดียวกันร่วมกัน นอกจากนี้ เพจและโหนดยังถูกประมวลผลและแคชโดยอิสระจากกัน และคุณไม่รู้ว่าอันใดจะถูกประมวลผลก่อนส่วนใหญ่จะไม่ได้รับการประมวลผลในคำขอเดียวกัน เนื่องจากหน้าและโหนดถูกจัดเก็บไว้ในถังเก็บแคช/คีย์ที่ต่างกัน และมีข้อมูลเมตาของแคชที่ต่างกัน
abe-cedarian avatar
kr flag
ขอบคุณ @4k4 ที่อธิบายว่าทำไมมันถึงไม่ทำงาน

โพสต์คำตอบ

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