Rendern Sie ein Knotenfeld in page.html.twig

12

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.

kraftybasterd
quelle
2
@kiamlaluno - warum hast du meine Frage bearbeitet? Wenn "Drupal 8" im Titel UND in der Frage enthalten ist, ist dies für potenzielle Anbieter offensichtlich UND macht es angesichts der Verbreitung von Drupal 6- und 7-Inhalten viel einfacher, in Google zu finden. Drupal 8 Fragen / Antworten sehr klar zu machen, ist hilfreich für die gesamte Gemeinschaft, um nach D8-spezifischen Antworten zu suchen. Ich habe mich gefragt, was Ihre Gründe für die Änderung waren.
Kraftybasterd
Bitte duplizieren Sie keine Tags in Fragetiteln. Tags sind an jeder Stelle sichtbar, an der eine Frage sichtbar ist. Daher müssen Tags auch im Fragentitel nicht verwendet werden.
Kiamlaluno
2
Natürlich bin ich neu hier ... aber helfen die Meta-Tags (in diesem Fall "8") bei Suchmaschinenergebnissen? Ich bin der Meinung, dass die Inhaltstitel, die Drupal 8 oder Drupal 7 enthalten, möglicherweise Menschen helfen könnten, über Google nach Antworten zu suchen ... nur eine Idee.
Kraftybasterd

Antworten:

24

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.

kraftybasterd
quelle
Ich war skeptisch und hatte den Eindruck, dass in D7 so etwas immer zB in einer Vorverarbeitungsfunktion sein sollte. Das Beispiel file_url()in den Dokumenten ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) macht genau das, also upvoted.
Graham C
Wie durchläuft man einen bestimmten Inhaltstyp und gibt seine Feldwerte darin aus page.html.twig?
Naourass Derouichi
2

Es gibt drei praktische Methoden, um damit zu arbeiten. Sie sparen Zeit beim Graben in komplizierten Render-Arrays.

  1. 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.

  2. 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)

  3. 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!

HongPong
quelle
1
Dies ist die richtige Antwort. Nach meiner Erfahrung wird das Feld {{ node.field_some_name.value }}nicht gerendert . Es wird nicht das gesamte Themensystem aufgerufen (Vorverarbeitungsfunktion, Vorlage usw.). OTOH, wenn Sie das twig_tweakModul verwenden, können Sie das vollständig gerenderte Feld mit{{ node.field_some_name|view }}
kentr