Ich habe ein Bildfeld in meinem Inhaltstyp (field_hero_image).
Ich möchte nicht, dass es in der Datei node.html.twig gerendert wird. Ich möchte es jedoch in der Datei page.html.twig rendern. Insbesondere möchte ich es neben dem Seitentitel rendern.
Welchen Code würde ich in meiner Datei page.html.twig verwenden, um auf Felder auf Knotenebene zuzugreifen und diese zu rendern?
(Es wurde eine ähnliche Frage gestellt, aber ich konnte die dort angegebene Antwort nicht zur Lösung meines Problems verwenden.)
Dies für Drupal 8-Themen.
Antworten:
Nachdem ich einiges mehr recherchiert hatte, konnte ich in anderen Fragen und auf drupal.org genug Stücke finden, um das zu erreichen, was ich tun wollte.
Für diese Antwort ist keine Vorverarbeitung erforderlich, daher muss Ihrer Datei mytheme.theme kein Code hinzugefügt werden.
Alle diese Variablen sind standardmäßig bereits in page.html.twig verfügbar.
Um den Standardwert eines Felds in page.html.twig zu rendern, verwenden Sie normalerweise eine Twig-Variable wie in
{{ node.field_some_name.value }}
.Wenn Sie ein Bildfeld haben und die URL zu dem in diesem Feld in der Vorlage page.html.twig gespeicherten Bild rendern möchten, würden Sie verwenden
{{ file_url(node.field_some_image.entity.fileuri) }}
.Wenn Sie den Titel eines Knotens in der Vorlage page.html.twig rendern möchten, verwenden Sie ihn schließlich
{{ node.label }}
.Ich habe auch gelernt, wie man einige Twig-Bedingungen für mein spezielles Problem verwendet, aber das geht über den Rahmen dieser Frage / Antwort hinaus.
quelle
file_url()
in den Dokumenten ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) macht genau das, also upvoted.page.html.twig
?Es gibt drei praktische Methoden, um damit zu arbeiten. Sie sparen Zeit beim Graben in komplizierten Render-Arrays.
Mit der Display Suite (mit dem Submodul ds_extras) können Sie der Heldenregion einen Block ("Blockregion") zuweisen, der ein anderer Anzeigemodus ist (dh nur einer, der das Heldenbild enthält). Somit erhalten Sie zwei verschiedene Anzeigemodi, die gleichzeitig angezeigt werden. Beachten Sie, dass einige Vorverarbeitungs-Hooks möglicherweise nicht wie erwartet ausgelöst werden, wenn Sie dies tun.
Das Modul twig_tweak vereinfacht solche Aufgaben erheblich und kann einfachere twig-Anweisungen für Feldwerte geben. Schauen Sie sich den Spickzettel für einige häufige Verwendungszwecke an:
{{ drupal_field('field_image', 'node', 1) }}
Die Funktionssignatur lautet:drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)
Das Modul twig_field_value macht einfachere twig- Anweisungen. Per README.txt:
<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />
Wenn ich das früher gewusst hätte, hätte es mir viel Zeit gespart!
quelle
{{ node.field_some_name.value }}
nicht gerendert . Es wird nicht das gesamte Themensystem aufgerufen (Vorverarbeitungsfunktion, Vorlage usw.). OTOH, wenn Sie dastwig_tweak
Modul verwenden, können Sie das vollständig gerenderte Feld mit{{ node.field_some_name|view }}