Ich möchte ein Bild als Hintergrundbild über einen Inline-Stil in Zweig rendern. Ich habe ein Feld mit dem Namen bg_image erstellt und es an die normale Seite angehängt.
Nachdem ich stundenlang herumgespielt hatte, konnte ich die Bild-URL in node.html.twig abrufen
{{ file_url(node.field_bg_image.0.entity.uri.value) }}
Aber ich konnte es nicht zum Laufen bringen - field-bg_image.html.twig
Kann ich den Knoten trotzdem von dort bekommen, um dann das Bild zu bekommen?
Wie kann ich die Bild-URL als Inline-Stil verwenden? Ich dachte, ich kann vielleicht eine Variable von field-bg_image.html.twig an image.html.twig übergeben und dann einfach rendern
{{ uri }}
anstatt
<img{{ attributes.addClass(classes) }} />
aber ich konnte es nicht bekommen, um die Variable dort zu übergeben, es sei denn, ich benutze Includes
{% include 'image.html.twig' with {'image': image, 'isFromField': isFromField} %}
(isFromField ist wahr, wenn es vom Feld kommt - field-bg_image.html.twig) Aber das hat auch nicht funktioniert. Das Bild wurde nie so gerendert.
Würde mich sehr freuen, wenn ihr helfen könnt - meine PHP Kenntnisse sind sehr grundlegend. Vielen Dank
Antworten:
Die Variable
node
ist nur in der Knotenvorlage (und der Seitenvorlage, wenn die URL den Knoten enthält) vorinstalliert. Wenn Sie nun in einer Feldvorlage auf Knotenfelder zugreifen möchten, müssen Sie an einer anderen Stelle suchen:field.html.twig:
element['#object']
ist die übergeordnete Entität in einer Feldvorlage, und Sie können von dieser Entität aus auf jedes Feld zugreifen (in Ihrem Fall auf den Knoten).Wenn Sie auf Rohwerte aus dem tatsächlichen Feld zugreifen möchten, ist es besser, der Logik des Feldzweigs zu folgen und direkt über das Feldelementobjekt auf den Wert in der Elementschleife zuzugreifen
#item
:Bearbeiten: Ruft die URL eines Bildstils ab
Wenn Sie das Modul Twig Tweak installieren , können Sie mit der URL die URL eines Bildstils abrufen :
quelle
Nur um zu erwähnen, dass dies funktioniert, wenn Sie dasselbe in einem der neuen benutzerdefinierten Blöcke tun möchten:
quelle
Ich benutze diesen Code in meiner .theme-Datei:
Es könnte verbessert werden. Ich überprüfe das Bildfeld und lade dessen URL mit einem Bildstil.
Dann habe ich in meiner Datei node - page.html.twig folgendes:
Auch dies könnte verbessert werden. Vielen Dank
quelle
Ich würde es anders machen. In Ihrer Knotenvorverarbeitungsfunktion:
Dann rendern Sie das Bild in Ihrer Vorlage (node - NODETYPE.html.twig) einfach so:
Wenn Sie jedoch jemals eine große Menge von Bildern rendern müssen, empfehle ich Ihnen, die Stile in ein Array zu laden, bevor Sie die einzelnen Bilder in einer Schleife wiedergeben. Ich sage das, weil ich auf ernsthafte Ladezeitprobleme gestoßen bin, weil ich über 300 Bilder laden musste und für jedes Bild den Stil einzeln geladen habe, anstatt sie alle vorher zu laden. Hier ist ein Beispiel, dieselbe Basis wie oben:
Dann rendern Sie die Bilder in Ihrer Vorlage (node - NODETYPE.html.twig) einfach so:
Ich habe es nicht wirklich getestet und das alles geht mir durch den Kopf, so dass es möglicherweise Fehler enthält. Sie können mich jederzeit warnen, damit ich das korrigiere :-).
quelle
Ich hatte einige Erfolge mit dem Hintergrundbildmodul, wenn der Anwendungsfall dies zulässt. Ich verwende eine dieser Codeoptionen, wenn ich eine angepasste DOM-Struktur benötige.
quelle