Как кастомизировать во views поле таксономии Font Awesome Icon?

Главные вкладки

Аватар пользователя Alex1989_drupal Alex1989_drupal 8 ноября в 14:43

Всем привет.

Цель: нужно отображать множественное поле термина таксономии с иконками. Иконка должна быть перед термином.

Ситуация: существует таксономия под названием «типы платформы». У таксономии добавлено поле, содержащее иконку. Тип поля Font Awesome Icon. Таксономия содержит термины, например Android или Windows. У каждого термина своя Font Awesome иконка.

В типе материала это поле Entity reference связано со словарем.
Это выводится через views.

Пробовал двумя путями views:
1. Через связь `field_platform: Taxonomy term` и поле (`Taxonomy term: иконка`). Его можно скрыть и перезаписать результаты, выводя `{{ field_platform_icon }}` или
`<i class="fab fa-{{ field_platform_icon }} fa-lg fa-pull-left"></i> {{ field_platform }}` но проблема в том, что если поле множественное, то иконка выводится одна.
Настроек множественного поля для таксономии нет.
Иконка выводится с обертками и компонентами в поле `'modules/contrib/fontawesome/templates/fontawesomeicon.html.twig' --> 'icon_name', 'style' и 'size'
Результат: несмотря на связь по `Taxonomy term`, views выводит поле только с одной иконкой, даже если добавить несколько раз.

2. Другой вариант. Использовал ‘rendered entity’ - поле: Content: Платформа - поле reference - форматтер rendered entity. Проблема в том, что стандартно drupal выводит сначала значение термина, и только потом иконку, а нужно наоборот.

Соответственно при перезаписи поля с `rendered entity`, иконка и термин не отделимы друг от друга (возможно это в `fontawesomeicon.html.twig`)
При добавлении `global custom text` ситуация с перезаписью таже.

Работает только переопределение поля views-view-field--name--page-1--field-platform-.html.twig:

{% for term in row._entity.field_platform %}
    {% set icon_name = term.entity.field_platform_icon.0.icon_name %}
    {% set icon_style = term.entity.field_platform_icon.0.style %}
    {% set icon_size = term.entity.field_platform_icon.0.settings.size %}
    {% set icon_pull = term.entity.field_platform_icon.0.settings.pull %}
    {% set term_name = term.entity.name.value %}
    {% set term_url = path('entity.taxonomy_term.canonical', {'taxonomy_term': term.entity.id()}) %}

    <a href="{{ term_url }}" class="taxonomy-term-link">
        <i class="{{ icon_style }} fa-{{ icon_name }} {{ icon_size }} {{ icon_pull }}"></i> {{ term_name }}
    </a>
{% endfor %}

Но есть ли способ заставить это работать в `rewriting` в Views? Он лучше работает с кэшированием, упрощает шаблон и логику.

Комментарии

Аватар пользователя Alex1989_drupal Alex1989_drupal 8 ноября в 21:25

VasyOK wrote: Вам надо в представлении выводящим ноды вывести для каждой ноды:
значек1 термин1
значек2 термин2
Если да - views_field_view
Объяснять?

Да, если не сложно.
Именно так:
значек1 (поле термина fontawesome) термин1
значек2 (поле термина fontawesome) термин2

На сколько я понимаю, существует проблема повторения изображений таксономии во views: https://www.drupal.org/project/views_field_view/issues/2560953

Аватар пользователя VasyOK VasyOK 9 ноября в 21:52
1

Хорошо, что ищите, но вы нашли немного не то.

Делается так (можно и по другому):

Вьюха 1 - поля терминов по его ID

Вьюха 2 - вывод IDшников поля со ссылкой на Вьюху 1

Вьюха 3 - та, которая выводит ноды