다른 카테고리 필드로 필터링 된 카테고리 페이지에 관련 항목 표시

Aug 20 2020

"스토브"라는 구조가 있습니다. 각 항목에는 두 개의 카테고리 필드 'fuelType'및 'output'이 있습니다.

  • 연료 유형 카테고리 =``목재 연소 '', '다중 연료', '가스'및 '전기'.
  • 출력 카테고리 = '4kW', '6kW', '8kW', '10kW',

카테고리 페이지 템플릿에서 다음의 간단한 코드는 'fuelType'필드를 기반으로 올바른 항목을 제공합니다. 예를 들어 'Wood burning'페이지를 볼 때 Wood Burning 스토브가 표시됩니다.

{% set entries = craft.entries.relatedTo(category).all() %}

{% for entry in entries %}
    <a href="{{ entry.url }}">{{ entry.title }}</a><br>
{% endfor %}

그러나 나는 지금 할 필요 나는 다음과 같은 것을 얻을 수 있도록 '출력'범주 그룹을 통해 루프 :

모든 장작 난로

소개 텍스트

시작 루프

  • 4kW 스토브

  • 스토브 _4kW_No.1

  • 스토브 _4kW_No.2

  • 스토브 _4kW_No.3

  • 6kW 스토브

  • 스토브 _6kW_No.1

  • 스토브 _6kW_No.2

  • 8kW 스토브

  • 스토브 _8kW_No.1

  • 스토브 _8kW_No.2

  • 스토브 _8kW_No.3

  • 스토브 _8kW_No.4

...등등....

루프 종료

이것이 가능할까요? 또는 개별 '출력'카테고리 슬러그를 사용하여 개별 항목 쿼리를 가져올 수 있습니까?

많은 감사

답변

1 JamesSmith Aug 20 2020 at 02:20

일반적으로이를 위해 그룹 필터를 사용합니다 . 출력해야하는 내용에 따라 성능 향상을 위해 즉시 로드 를 사용해야 합니다.

{% set groupedEntries = craft.entries.with(['yourOutputCatFieldHandle']).relatedTo(category).all()|group('yourOutputCatFieldHandle[0].title') %}

{% for cat, entries in groupedEntries %}
    <h3>{{ cat }}</h3>
    <ul>
        {% for entry in entries %}
            <li><a href="{{ entry.url }}">{{ entry.title }}</a></li>
        {% endfor %}
    </ul>
{% endfor %}

편집 : 제어판의 구조 순서에 따라 올바른 범주 순서를 사용할 수 있도록 아래의 대체 답변입니다.

참고 :이 방법에는 supersort 플러그인 이 필요합니다 .

{# ======================================
First, fetch entries related to this category,
then group the array by each category's
`lft` structure position, then sort the array
by those keys with supersort's ksort function
========================================= #}

{% set groupedEntries = craft.entries.with([
        'yourOutputCatFieldHandle'
    ])
    .relatedTo(category)
    .all()|group('yourOutputCatFieldHandle[0].lft')|supersort('ksort')
%}

{# ======================================
Next, create a hash map of those categories so we can
match up the `lft` left structure position
with the category's title later.
(google "Nested Sets" if you're really bored)
========================================= #}

{% if groupedEntries|length %}
    {% set catTitlesMap = craft.categories.group('yourOutputCatGROUPHandle').all()|group('lft') %}
{% endif %}

{# ======================================
Finally, loop through the grouped array,
matching up the accessory's `lft` position
with the hash map to get the right title...
========================================= #}

{% for cat, entries in groupedEntries %}
    <h3>{{ catTitlesMap[cat][0].title }}</h3>
    <ul>
        {% for entry in entries %}
            <li><a href="{{ entry.url }}">{{ entry.title }}</a></li>
        {% endfor %}
    </ul>
{% endfor %}