Итак, у меня есть этот узел:
object(Drupal\node\Entity\Node)[1862]
protected 'values' =>
array (size=17)
'vid' =>
array (size=1)
'x-default' => string '7' (length=1)
'langcode' =>
array (size=1)
'x-default' =>
array (size=1)
0 =>
array (size=1)
'value' => string 'en' (length=2)
... (more fields)
'field_image' =>
array (size=1)
'x-default' =>
array (size=1)
0 =>
array (size=5)
'target_id' => string '1' (length=1)
'alt' => string '' (length=0)
'title' => string '' (length=0)
'width' => string '150' (length=3)
'height' => string '120' (length=3)
Теперь у field_image есть массив с x-default и некоторыми базовыми данными изображения. Как мне показать изображение или создать ссылку на изображение внутри шаблона Twig?
url(node.field_image.0.entity.uri)
( соответствующий вопрос )Recoverable fatal error: Object of class Drupal\Core\Field\FieldItemList could not be converted to string
поэтому я попробовал это с этим:url(node.field_image.0.entity.uri.value)
но тогда это просто говорит мне это:Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("Route "public://image.png" does not exist.")
FieldItemList
s в строковое представление (которое я не могу найти)url()
хочет маршрут. Как насчетurl_from_path(node.field_image.0.entity.uri.value)
?url_from_path()
кажется, генерирует это:http://mywebsite.local/public%3A//image.png
так что кажется, что urlencoding и добавляет точное значение к URL-адресуОтветы:
Вот обновленная версия для этого ответа после 8.0.x. Эта база основана на комментарии @joelpittet .
источник
url()
метод, так что вы можете просто позвонить ,entity.url()
а не проходяentity.fileuri
кfile_url()
Я не знаю о Twig, но вы получаете URI файла
$node->field_image->entity->getFileUri()
в PHP, и вам нужно вызвать егоfile_create_url()
:Я не знаю, возможно ли это в ветке. Если это невозможно, вы всегда можете рассчитать его в предварительной обработке и добавить в качестве новой переменной.
источник
Если кому-то нужно стилизованное изображение:
источник
use Drupal\image\Entity\ImageStyle;
$relative = file_url_transform_relative($styled_image_url);
чтобы убедиться, что это относительно. API здесьНи одно из вышеперечисленных решений не помогло мне (возможно, те, которые работали для более старых версий 8.x, но не для версии 8.5
ПРИМЕЧАНИЕ: должно работать на Drupal 8.5+
источник
Так что я узнал ответ с помощью Клайва .
Получение URI изображения в Twig выполняется с помощью
node.field_image.0.entity.uri.value
Получить полный URL-адрес изображения можно с помощью
file_create_url(node.field_image.0.entity.uri.value)
Сделать это в Twig пока невозможно, но они работают над этим -> см. Здесь
источник
То, что в итоге работало на меня в D8, это:
Использование
kint($node->get('field_image')->entity)
и просмотр массива было очень полезноТогда в моем файле ветки я использовал:
источник
Вы можете получить URL-адрес напрямую, используя field_image.entity.url
источник
Я всегда использую вспомогательную функцию
источник
Это способ, если вы хотите получить URL-адрес изображения со связанным стилем изображения для любого поля изображения в шаблоне ветки:
Сначала установите модуль Twig Tweak
Затем установите URI изображения в качестве переменной. С помощью URI вы можете использовать шаблон настройки веток, чтобы получить путь с любым стилем изображения, который вы хотите. Увидеть ниже:
Twig Tweak v2.4 + предлагает
file_url
фильтр для извлечения URL файла из сущности.источник
У меня была та же проблема, поэтому я создал функцию
get_image_path()
Twig и добавил ее с кучей других полезных вещей в мой шаблонный модуль Starter:https://github.com/brynj-digital/starter
Функция принимает поле изображения и имя компьютера стиля изображения, а затем возвращает этот путь изображения.
Это работает во многих контекстах - вы можете передать
node.field_name
,content.field_name
илиrow._entity.field_name
(в случае шаблона поля View).источник
Черт возьми, мне потребовались годы, чтобы выяснить, почему мои итоговые URL не работают. Все 404-е. Вы должны сначала создать производную, если она еще не существует .
Так, например, когда вы добавляете стиль изображения позже, после того, как исходное изображение было загружено, тогда еще нет стилизованного файла изображения (производное изображения). Это должно быть создано в первую очередь.
Замените
field_MYIMAGE
и поMYSTYLE
мере необходимости.Я хотел бы, чтобы это произошло автоматически.
источник
В некоторой степени, вот что я использовал (благодаря всем предыдущим ответам, чтобы получить меня там), чтобы получить URL файла изображения из поля изображения медиа-объекта в ветке:
Теперь я могу использовать эту переменную в моем шаблоне ветки
источник
Чтобы получить атрибут изображения, такой как URI, alt, title и т. Д., Используйте синтаксис, подобный шаблону ниже
В шаблоне веточки узла
В поле веточка шаблона
В другом поле шаблон веточки
Примечание: Также проверьте twig_tweaks модуль шпаргалки для деталей , связанных с прутой связанным с этим вопрос.
источник
Вы можете использовать
url()
метод класса File в качестве ярлыка, поэтому:можно сократить до:
Это работает в функциях предварительной обработки, но срабатывает
Twig_Sandbox_SecurityError
при вызове в шаблоне ветки.Если вы получаете,
Twig_Sandbox_SecurityError
вы можете указать, чтобы twig разрешилurl
в файле settings.php, как указано в этом сообщении StackoverflowСм. Документацию по File :: Url () https://api.drupal.org/api/drupal/core%21modules%21file%21src%21Entity%21File.php/function/File%3A%3Aurl/8.6.x
источник
Вы можете сделать это двумя способами!
1) file_create_url (---------) // внутри записи путь узла
2) file_url (-------) // внутри записи путь узла
источник