Also habe ich diesen Knoten:
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)
Jetzt hat das field_image ein Array mit x-default und einigen grundlegenden Bilddaten. Wie zeige ich das Bild an oder erstelle einen Link zu dem Bild in der Twig-Vorlage?
url(node.field_image.0.entity.uri)
( relevantes Problem )Recoverable fatal error: Object of class Drupal\Core\Field\FieldItemList could not be converted to string
so dass ich es mit dieser versucht:url(node.field_image.0.entity.uri.value)
aber dann sagt es mir gerade dies:Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("Route "public://image.png" does not exist.")
FieldItemList
s in eine Zeichenfolgendarstellung umzuwandeln (die ich nicht finden kann)url()
will eine Route. Wie wäre esurl_from_path(node.field_image.0.entity.uri.value)
?url_from_path()
scheint dies zu erzeugen:http://mywebsite.local/public%3A//image.png
so scheint es, dass es urlencoding ist und den genauen Wert an die URL anhängtAntworten:
Hier ist eine Update-Version für diese Antwort nach 8.0.x. Diese Basis auf @joelpittet Kommentar.
quelle
url()
Methode, sodass Sie einfach anrufen können,entity.url()
anstattentity.fileuri
anfile_url()
Ich weiß nichts über Twig, aber Sie bekommen die Datei-URI mit
$node->field_image->entity->getFileUri()
in PHP, und das müssen Sie aufrufenfile_create_url()
:Ich weiß nicht, ob das im Zweig möglich ist. Wenn dies nicht möglich ist, können Sie es immer im Vorfeld berechnen und als neue Variable hinzufügen.
quelle
Wenn jemand ein gestyltes Bild benötigt:
quelle
use Drupal\image\Entity\ImageStyle;
$relative = file_url_transform_relative($styled_image_url);
um sicherzustellen, dass es relativ ist. API hierKeine der obigen Zweiglösungen funktionierte für mich (vielleicht funktionierten diese für ältere 8.x-Versionen, aber nicht für die 8.5-Version)
HINWEIS: Sollte für Drupal 8.5+ funktionieren
quelle
Also habe ich die Antwort mit Hilfe von Clive herausgefunden .
Das Abrufen der Bild-URI in Twig erfolgt mit
node.field_image.0.entity.uri.value
Die vollständige URL für das Bild erhalten Sie mit
file_create_url(node.field_image.0.entity.uri.value)
Dies in Twig zu tun ist noch nicht möglich, aber sie arbeiten daran -> siehe hier
quelle
Was bei mir in D8 gelandet ist:
Die Verwendung
kint($node->get('field_image')->entity)
und Durchsicht des Arrays war sehr hilfreichDann habe ich in meiner Zweigdatei Folgendes verwendet:
quelle
Sie können die URL direkt mit field_image.entity.url abrufen
quelle
Ich benutze immer eine Hilfsfunktion
quelle
So können Sie die Bild-URL mit dem zugehörigen Bildstil für ein beliebiges Bildfeld in einer Zweigvorlage abrufen:
Installieren Sie zuerst das Twig Tweak-Modul
Stellen Sie dann die Bild-URI als Variable ein. Mit der URI können Sie ein Zweig-Tweaks-Muster verwenden, um den Pfad mit dem gewünschten Bildstil abzurufen. Siehe unten:
Twig Tweak v2.4 + bietet einen
file_url
Filter zum Extrahieren der Datei-URL aus einer Entität.quelle
Ich hatte das gleiche Problem, also habe ich eine
get_image_path()
Twig-Funktion erstellt und sie mit einer Reihe anderer nützlicher Dinge zu meinem Starter-Modul für Boilerplates hinzugefügt:https://github.com/brynj-digital/starter
Die Funktion akzeptiert das Bildfeld und den Computernamen eines Bildstils und gibt dann diesen Bildpfad zurück.
Es funktioniert in vielen Zusammenhängen - man kann passieren
node.field_name
,content.field_name
oderrow._entity.field_name
(im Falle einer Ansicht Felder Vorlage).quelle
Meine Güte, es hat tatsächlich mein Alter gedauert, um herauszufinden, warum meine resultierenden URLs nicht funktionierten. Das alles 404'ed. Sie müssen zuerst ein Derivat erstellen, falls es noch nicht vorhanden ist .
Wenn Sie beispielsweise einen Bildstil später hinzufügen, nachdem das Originalbild hochgeladen wurde, ist noch keine gestaltete Bilddatei vorhanden (das Bildderivat). Es muss zuerst erstellt werden.
Ersetzen
field_MYIMAGE
undMYSTYLE
nach Bedarf.Ich wünschte, das würde automatisch passieren.
quelle
Hier ist, was ich verwendet habe (dank aller vorherigen Antworten, um mich dorthin zu bringen), um eine Bilddatei-URL aus dem Bildfeld einer Medieneinheit in twig zu erhalten:
Jetzt kann ich diese Variable in meiner Zweigvorlage verwenden
quelle
Verwenden Sie zum Abrufen von Bildattributen wie URI, Alt, Titel usw. die folgende vorlagenbezogene Syntax
In Knoten Zweig Vorlage
In Feld Zweig Vorlage
In einem anderen Feld Zweig Vorlage
Hinweis: Überprüfen Sie auch das Spickzettel des twig_tweaks- Moduls auf Details zu Problemen mit dem twig .
quelle
Sie können die
url()
in der File-Klasse angegebene Methode als Verknüpfung verwenden.kann gekürzt werden auf:
Dies funktioniert in Vorverarbeitungsfunktionen, löst jedoch
Twig_Sandbox_SecurityError
beim Aufruf in einer Zweigvorlage einen aus.Wenn Sie etwas erhalten
Twig_Sandbox_SecurityError
, können Sie twig anweisen , esurl
in Ihrer settings.php-Datei zuzulassen, wie in diesem Stackoverflow-Beitrag erwähntSiehe Dokumentation zu File :: Url () https://api.drupal.org/api/drupal/core%21modules%21file%21src%21Entity%21File.php/function/File%3A%3Aurl/8.6.x
quelle
Sie können es auf zwei Arten tun!
1) file_create_url (---------) // inside schreibe den Pfad des Knotens
2) file_url (-------) // inside schreibe den Pfad des Knotens
quelle