J'ai donc ce nœud:
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)
Désormais, field_image a un tableau avec x-default et quelques données d'image de base. Comment puis-je afficher l'image ou créer un lien vers l'image à l'intérieur du modèle Twig?
url(node.field_image.0.entity.uri)
( problème pertinent )Recoverable fatal error: Object of class Drupal\Core\Field\FieldItemList could not be converted to string
alors je l'ai essayé avec ceci:url(node.field_image.0.entity.uri.value)
mais alors il me dit simplement ceci:Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("Route "public://image.png" does not exist.")
FieldItemList
s en une représentation de chaîne (que je ne trouve pas)url()
veut un itinéraire. Que diriez-url_from_path(node.field_image.0.entity.uri.value)
vousurl_from_path()
semble générer ceci:http://mywebsite.local/public%3A//image.png
il semble donc qu'il s'agisse d'un codage d'URL et de l'ajout de la valeur exacte à l'URLRéponses:
Voici une version mise à jour de cette réponse après la version 8.0.x. Cette base sur @joelpittet commente.
la source
url()
méthode, vous pouvez donc simplement appelerentity.url()
plutôt que de passerentity.fileuri
àfile_url()
Je ne sais pas à propos de Twig, mais vous obtenez le fichier URI avec
$node->field_image->entity->getFileUri()
PHP, et vous devez faire appelfile_create_url()
à cela:Je ne sais pas si c'est possible dans twig. Si ce n'est pas possible, vous pouvez toujours le calculer en prétraitement et l'ajouter en tant que nouvelle variable.
la source
Si quelqu'un avait besoin d'une image stylée:
la source
use Drupal\image\Entity\ImageStyle;
$relative = file_url_transform_relative($styled_image_url);
pour vous assurer que c'est relatif. API iciAucune des solutions de brindille ci-dessus ne fonctionnait pour moi (celles-ci fonctionnaient peut-être pour les anciennes versions 8.x mais pas pour la version 8.5
NOTE: devrait fonctionner pour Drupal 8.5+
la source
J'ai donc trouvé la réponse avec l'aide de Clive .
Obtenir l'URI de l'image dans Twig se fait en utilisant
node.field_image.0.entity.uri.value
Obtenir l’URL complète de l’image peut être fait en utilisant
file_create_url(node.field_image.0.entity.uri.value)
Faire cela dans Twig n'est pas encore possible mais ils y travaillent -> voir ici
la source
Ce qui a fini par travailler pour moi en D8, c'est:
Utiliser
kint($node->get('field_image')->entity)
et regarder à travers le tableau était très utileEnsuite, dans mon fichier de brindille, j'ai utilisé:
la source
vous pouvez obtenir l'URL directement en utilisant field_image.entity.url
la source
J'utilise toujours une fonction d'assistance
la source
Si vous souhaitez obtenir l'URL d'image avec le style d'image associé pour tout champ d'image d'un modèle de brindille, procédez comme suit:
Commencez par installer le module Twig Tweak
Définissez ensuite l'URI de l'image en tant que variable. Avec l'URI, vous pouvez utiliser un motif de modifications de brindilles pour obtenir le chemin d'accès, quel que soit le style d'image souhaité. Voir ci-dessous:
Twig Tweak v2.4 + offre un
file_url
filtre pour extraire l'URL du fichier d'une entité.la source
J'avais le même problème, alors j'ai créé une
get_image_path()
fonction Twig et je l'ai ajoutée avec un tas d'autres choses utiles dans mon module de base standard:https://github.com/brynj-digital/starter
La fonction accepte le champ d'image et le nom d'ordinateur d'un style d'image, puis renvoie ce chemin d'accès.
Il travaille dans beaucoup de contextes - vous pouvez passer
node.field_name
,content.field_name
ourow._entity.field_name
(dans le cas d'un modèle Voir les champs).la source
Mon dieu, il a fallu à mon âge de comprendre pourquoi mes URL résultantes ne fonctionnaient pas. Le tout 404'ed. Vous devez d'abord créer un dérivé s'il n'existe pas déjà .
Ainsi, par exemple, lorsque vous ajoutez un style d'image ultérieurement, une fois l'image d'origine téléchargée, aucun fichier d'image de style n'est encore créé (le dérivé de l'image). Il faut d'abord le créer.
Remplacez
field_MYIMAGE
etMYSTYLE
selon vos besoins.Je souhaite que cela se produise automatiquement.
la source
quelque chose de relatif, voici ce que j’ai utilisé (grâce à toutes les réponses précédentes pour me rendre là-bas) pour obtenir une URL de fichier image à partir du champ d’image d’une entité multimédia en twig:
maintenant je peux utiliser cette variable dans mon modèle de brindille
la source
Pour obtenir un attribut d'image tel que URI, alt, titre, etc., utilisez la syntaxe suivante:
Dans le modèle de noeud de brindille
Modèle de brindille de champ
Dans un autre gabarit de champ
Remarque: Vérifiez également twig_tweaks module antisèche pour les détails liés à la brindille question connexe.
la source
Vous pouvez utiliser la
url()
méthode de la classe File comme raccourci pour:peut être raccourci à:
Cela fonctionne dans les fonctions de prétraitement, mais déclenche un
Twig_Sandbox_SecurityError
lorsqu’il est appelé dans un modèle de brindille.Si vous recevez,
Twig_Sandbox_SecurityError
vous pouvez indiquer à twig d'autoriserurl
votre fichier settings.php comme indiqué dans cet article de StackoverflowVoir la documentation sur File :: Url () https://api.drupal.org/api/drupal/core%21modules%21file%21src%21Entity%21File.php/function/File%3A%3Aurl/8.6.x
la source
Vous pouvez le faire de deux manières!
1) file_create_url (---------) // à l'intérieur écrit le chemin du noeud
2) file_url (-------) // à l'intérieur écrit le chemin du noeud
la source