Я хочу сделать изображение как фоновое изображение с помощью встроенного стиля в веточку. Я создал поле с именем bg_image и прикрепил его к стандартной простой странице.
После нескольких часов игры я смог получить URL-адрес изображения в node.html.twig
{{ file_url(node.field_bg_image.0.entity.uri.value) }}
но я не смог заставить его работать внутри поля - field-bg_image.html.twig
Могу ли я получить узел оттуда, чтобы я мог получить изображение?
Как я могу получить URL изображения для использования в качестве встроенного стиля? Я подумал, может быть, я могу передать переменную из поля - field-bg_image.html.twig в image.html.twig, а затем просто сделать
{{ uri }}
вместо того
<img{{ attributes.addClass(classes) }} />
но я не мог заставить его передать переменную там, если я не использую включает
{% include 'image.html.twig' with {'image': image, 'isFromField': isFromField} %}
(isFromField имеет значение true, если оно берется из поля - field-bg_image.html.twig) Но это тоже не сработало. Изображение никогда не отображалось таким образом.
Был бы очень рад, если вы можете помочь - мои знания php очень просты. Благодарность
Ответы:
Переменная
node
предварительно загружается только в шаблон узла (и шаблон страницы, если URL содержит узел). Теперь, если вы хотите получить доступ к полям узла в шаблоне поля, вы должны искать в другом месте:field.html.twig:
element['#object']
является родительской сущностью в шаблоне поля, и вы можете получить доступ к любому полю из этой сущности (в вашем случае это узел).Если вы хотите получить доступ к необработанным значениям из фактического поля, лучше следовать логике ветки поля и получить доступ к значению внутри цикла элементов непосредственно из объекта элемента поля
#item
:Изменить: Получить URL-адрес стиля изображения
Установите модуль Twig Tweak, и вы можете использовать URI, чтобы получить URL-адрес стиля изображения:
источник
Просто отметим, что если вы хотите сделать то же самое в одном из новых пользовательских блоков, это работает:
источник
Я использую этот код в моем файле .theme:
Это может быть улучшено. Я проверяю поле изображения и загружаю его URL со стилем изображения.
Тогда в моем узле - файл page.html.twig у меня есть это:
Опять же, это может использовать некоторое улучшение. Благодарность
источник
Я бы сделал это по-другому. В вашем узле preprocess функция:
Затем, в вашем шаблоне (узел - NODETYPE.html.twig), просто визуализируйте изображение следующим образом:
Хотя, если вам когда-нибудь понадобится рендерить большое количество изображений, я бы посоветовал вам загрузить стили в массив перед тем, как выполнять цикл для каждого изображения. Я говорю, что, поскольку у меня возникли серьезные проблемы со временем загрузки, потому что мне пришлось загрузить более 300 изображений, и для каждого изображения я загружал стиль отдельно, а не загружал их все раньше, вот пример, та же база, что и выше:
С другой стороны, в вашем шаблоне (узел - NODETYPE.html.twig) просто отрендерируйте изображения следующим образом:
Я на самом деле не проверил это, и я выкинул все это из головы, чтобы оно могло содержать ошибки, не стесняйтесь предупредить меня, поэтому я исправлю это :-).
источник
Я имел некоторый успех, используя модуль фонового изображения, когда это позволяет вариант использования. Я использую один из этих вариантов кода, когда мне нужна настроенная структура DOM.
источник