การจัดกลุ่มผลลัพธ์ Super Table ผ่าน Twig Multidimensional Array
ฉันพยายามวนลูปอาร์เรย์ Super Table และผลลัพธ์กลุ่มตามหมวดหมู่ ('การมีส่วนร่วม') ฉันไปได้ไกล แต่ฉันกำลังดิ้นรนในการสร้างอาร์เรย์ใน Twig ที่ให้สิ่งที่ฉันต้องการ (ฉันพบว่าอาร์เรย์เชื่อมโยงยุ่งยากมากใน Twig หลังจากใช้ PHP มานาน ... )
การตั้งค่าการสนับสนุนทำงาน ดูเหมือนว่าฉันจะเขียนกฎการผสานไม่ถูกต้องดังนั้นผู้ร่วมให้ข้อมูลแต่ละคนจึงรวมเข้ากับบทบาทของตน ขั้นตอนต่อไปจากนั้นจะรวมรายชื่อเพื่อนำเสนอต่อไป ...
นี่คือที่ที่ฉันติดอยู่ในขณะนี้:
{% set featuredContributors = [] %}
{% for person in book.contributors.all() %}
{% if person.featured == 1 %}
{% set contribution = person.contribution.one().title %}
{% set contributor = person.contributor.one().title %}
{% set featuredContributors =
featuredContributors |
merge({
(contribution): [contributor]
})
%}
{% endif %}
{% endfor %}
อาร์เรย์ผลลัพธ์ควรมีลักษณะดังนี้ (โดยแต่ละอาร์เรย์รวมเป็นรายการที่คั่นด้วยจุลภาค):
{% set featuredContributors = {
Editor: 'Person One, Person Two',
Writer: 'Person Three, Person Four',
Other Role: 'Person Five',
} %}
มีวิธีที่ง่ายกว่านี้ไหม PHP ผ่าน Twig Extension? : ง
คำตอบ
สำหรับการจัดกลุ่มอาร์เรย์ให้ใช้ตัวกรองกลุ่มของ Craft หรือตัวกรองดัชนีจากนั้นสำหรับการเข้าร่วมรายการอาร์เรย์ด้วยเครื่องหมายจุลภาคให้ใช้ตัวกรองการรวมของ Twig
สิ่งนี้อาจเป็นสิ่งที่คุณกำลังมองหา (ฉันยังเพิ่มการโหลดอย่างกระตือรือร้นเพื่อประสิทธิภาพที่ดีขึ้นและฉันใช้ตัวกรองแผนที่เป็นวิธีที่สะอาดกว่าในการจัดระเบียบอาร์เรย์แม้ว่าคุณจะสามารถใช้การวนซ้ำที่ซ้อนกันได้หากคุณพบว่ามันง่ายขึ้น อ่าน):
{% set featuredPeopleGrouped = book.contributors
.featured(1)
.with(['contribution','contributor'])
.all()|group('contribution[0]')
%}
<dl>
{% for contributionType, rowData in featuredPeopleGrouped %}
{% set contributors = rowData|map(row => row.contributor[0].title) %}
<dt>{{ contributionType }}: </dt>
<dd>{{ contributors|join(', ') }}</dd>
{% endfor %}
</dl>