Как программно передать значение поля 1 в массив класса поля 2 в.тема
Мотивация
Контекст между массивами переменных шаблона - это старая проблема, уже известная в D6 и 7 на уровне тематизации. А как насчет D8 сейчас? Есть какой-нибудь свет на горизонте? Есть ли шанс сделать это доступным без использования просмотров модуля настроек и обходных путей?
Давайте воспользуемся примером:
Стандартный тип контента по умолчанию Статья имеет 4 поля ввода:
- метка (название)
- текст (основной текст площадь)
- изображение
- теги (термины, ссылка на сущность)
Этот тип контента также имеет альтернативный Параметр Управления отображением полей для режима просмотра тизера , где форматирование поля изображения настраивается с использованием меньшего стиля изображения и с возможностью ссылки на файл или полную страницу узла. Это создает элемент <a>
с URL-адресом, но без заголовка или каких-либо других атрибутов вокруг разметки изображения статьи в представлении тизера режим.
Вопрос:
Как я могу передать, например, первое значение тегов (входных терминов) программно в массив классов элемента обертывания <a>
?
В node--view--frontpage.html.twig
этом...
`<a href="#" class="image icon fa-{{ (content.field_tags['0']['#title']) }}">{{ content.field_image }}</a>`
... работает. Конечно, потому что мы берем его из переменной страницы. Но image-formatter.html.twig
глубже вложен во всю систему шаблонов, и было бы перегрузкой иметь здесь весь массив переменных страницы. Конечно, его там нет.
Мое предположение состояло в том, чтобы использовать следующие функции предварительной обработки:
-
function theme_preprocess_field(&$variables) {}
и или function theme_preprocess_image_formatter(&$variables) {}
Проблема:
Похоже - даже если _preprocess_image_formatter
было предложено в комментариях к веточке image-formatter.html.twig
- 1.) нет места для передачи строки в массив атрибутов для элемента <a>
в этом файле ветки, так как в массиве для этого нет места. 2.) Передача. Как? Глобальные переменные в большинстве случаев не являются лучшим решением.
Основной код шаблона image-formatter.html.twig
:
{% if url %}
<a href="{{ url }}">{{ image }}</a>
{% else %}
{{ image }}
{% endif %}
Составленное изменение для демонстрации необходимого эффекта:
{% if url %}
<a href="{{ url }}"{{ some defined attributes }}>{{ image }}</a>
{% else %}
{{ image }}
{% endif %}
ПРИМЕЧАНИЕ: добавление значений вручную и непосредственно в файл темы twig, например
<a href="{{ url }}" class="hallo-classes">{{ image }}</a>`
Показывает, что это правильный шаблон ветки. Но, похоже, нет способа передать другие значения (здесь), так как массив _preprocess_image_formatter
$variables, конечно, не знает никаких значений других полей (например, тегов поле терминов). И _preprocess_field()
не достигает уровня форматирования изображения, так что добавление массив атрибутов скорее влияет на окружающий div, но не на элемент <a>
.
1 answers
Контекст между массивами переменных шаблона - это старая проблема, уже известная в D6 и 7 на уровне тематизации. А как насчет D8 сейчас? Есть какой-нибудь свет на горизонте?
Нет, на горизонте нет света, совсем наоборот. Из-за концепции вложенных элементов визуализации, которые отображаются независимо. В D8 это становится намного сложнее из-за динамического кэша. И это совсем не сработало бы с планами на будущее с заполнителями и ленивыми здание.