Получение всех тэгов таксономии коллекции страниц в шаблоне Twig для Grav CMS

 

 Grav CMSTwigсниппет

Для создания списка тэгами таксономии страниц в Grav CMS используется плагин Taxonomy List, однако часто приходится решать задачи, для которых этот плагин не подходит, например, для создания списка тэгов таксономии для отдельных коллекций, либо при необходимости снижения количества и уменьшения зависимости веб-сайта от набора используемых плагинов.

Действительно, для создания списка тэгов таксономии коллекции, можно легко обойтись без специальных плагинов, реализуя требуемую логику непосредственно в шаблоне оформления Twig, как показано в следующем фрагменте кода.

{% set tags = [] %}
{% for item in page.collection %}
    {% for tag in item.taxonomy.tag %}
        {% if tag not in tags %}
            {% set tags = tags|merge([tag]) %}
        {% endif %}
    {% endfor %}
{% endfor %}
{% if tags %}
    {# логика для вывода списка полученных значений #}
{% endif %}

В приведённом примере создаётся список тэгов таксономии коллекции, однако, при внесении изменений в код, становится возможным получать списки для каждого доступного типа таксономии. Для этого меняется обращение к типу таксономии для элементов коллекции с item.taxonomy.tag на item.taxonomy.mytype, где mytype – требуемый тип таксономии.

Создав макрос Twig, можно добиться универсальности, повысить удобство и сделать возможным многократное использование кода в разных частях и файлах шаблона.

{% macro listCollectionTaxonomyType(collection, type) %}
{% spaceless %}
    {% set values, type = [], type|default('tag') %}
    {% for item in collection %}
        {% for value in item.taxonomy[type] if value not in values %}
            {% set values = values|merge([value]) %}
        {% endfor %}
    {% endfor %}
    {% for value in values|sort %}
        {{ '<span>' ~ value ~'</span>' }}
    {% endfor %}
{% endspaceless %}
{% endmacro listCollectionTaxonomyType %}

Узнать подробнее о вариантах использования макросов Twig можно в официальной документации Twig.