dimayakovlev.ru


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

Для создания списка тегами таксономии страниц в 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.