Je veux rendre une image comme image d'arrière-plan via un style en ligne dans twig. J'ai créé un champ appelé bg_image et je l'ai attaché à la page standard standard.
Après avoir tripoté pendant des heures, j'ai pu obtenir l'URL de l'image dans node.html.twig
{{ file_url(node.field_bg_image.0.entity.uri.value) }}
mais je ne pouvais pas le faire fonctionner à l'intérieur du champ - field-bg_image.html.twig
Puis-je obtenir le nœud à partir de là de toute façon, afin que je puisse ensuite obtenir l'image?
Comment puis-je obtenir l'URL de l'image à utiliser comme style en ligne? J'ai pensé que je pourrais peut-être passer une variable de field - field-bg_image.html.twig à image.html.twig et ensuite simplement rendre
{{ uri }}
au lieu de
<img{{ attributes.addClass(classes) }} />
mais je ne pouvais pas le faire passer la variable à moins que j'utilise comprend
{% include 'image.html.twig' with {'image': image, 'isFromField': isFromField} %}
(isFromField est vrai, quand il vient du champ - field-bg_image.html.twig) Mais cela n'a pas fonctionné non plus. L'image n'a jamais été rendue de cette façon.
Serait très heureux si vous pouvez aider - mes connaissances php sont très basiques. Merci
Réponses:
La variable
node
n'est préchargée que dans le modèle de nœud (et le modèle de page, si l'url contient le nœud). Maintenant, si vous souhaitez accéder aux champs de noeud dans un modèle de champ, vous devez regarder dans un endroit différent:field.html.twig:
element['#object']
est l'entité parente dans un modèle de champ et vous pouvez accéder à n'importe quel champ à partir de cette entité (dans votre cas, le nœud).Si vous souhaitez accéder aux valeurs brutes du champ réel, il est préférable de suivre la logique du rameau de champ et d'accéder à la valeur à l'intérieur de la boucle d'articles directement à partir de l'objet d'élément de champ
#item
:Modifier: obtenez l'url d'un style d'image
Installez le module Twig Tweak et vous pouvez utiliser l'uri pour obtenir l'url d'un style d'image:
la source
Juste pour mentionner que si vous voulez faire la même chose dans l'un des nouveaux blocs personnalisés, cela fonctionne:
la source
J'utilise ce code dans mon fichier .theme:
Cela pourrait être amélioré. Je vérifie le champ d'image et charge son URL avec un style d'image.
Ensuite, dans mon fichier node - page.html.twig, j'ai ceci:
Encore une fois, cela pourrait nécessiter certaines améliorations. Merci
la source
Je le ferais d'une autre manière. Dans votre fonction de prétraitement de nœud:
Ensuite, dans votre modèle (node - NODETYPE.html.twig), rendez simplement l'image de cette façon:
Bien que, si vous devez rendre une grande quantité d'images, je vous conseille de charger les styles dans un tableau avant de boucler sur chaque image. Je dis que parce que j'ai rencontré de sérieux problèmes de temps de chargement parce que je devais charger plus de 300 images et pour chaque image, je chargeais le style individuellement au lieu de les charger toutes avant, voici un exemple, même base que ci-dessus:
Ensuite, dans votre modèle (node - NODETYPE.html.twig), rendez simplement les images de cette façon:
Je ne l'ai pas vraiment testé et je retire tout ça de ma tête donc ça peut contenir des erreurs, n'hésitez pas à me prévenir donc je vais corriger ça :-).
la source
J'ai eu un certain succès en utilisant le module Image d'arrière - plan lorsque le cas d'utilisation le permet. J'utilise l'une de ces options de code lorsque j'ai besoin d'une structure DOM personnalisée.
la source