Rendering di un campo nodo all'interno di page.html.twig


12

Ho un campo immagine sul mio tipo di contenuto (field_hero_image).

Non voglio renderlo nel file node.html.twig. Tuttavia, voglio renderlo nel file page.html.twig. In particolare, voglio renderlo insieme al titolo della pagina.

Quale codice dovrei usare nel mio file page.html.twig per accedere ai campi a livello di nodo e renderizzarli?

(È stata pubblicata una domanda simile, ma non sono stato in grado di utilizzare la risposta fornita lì per risolvere il mio problema.)

Questo per il tema di Drupal 8.


2
@kiamlaluno - perché hai modificato la mia domanda ?? Avere "Drupal 8" nel titolo E nella domanda rende ovvio ai potenziali fornitori di servizi di posta elettronica e rende molto più facile trovare su Google, data la prevalenza dei contenuti Drupal 6 e 7; fare in modo che Drupal 8 domande / risposte sia molto chiaro è utile alla società in generale alla ricerca di risposte specifiche per D8. Mi chiedevo quale fosse il tuo ragionamento per cambiarlo.
kraftybasterd,

Non duplicare i tag nei titoli delle domande; i tag sono visibili in ogni punto in cui è visibile una domanda, quindi non è necessario utilizzare i tag anche nel titolo della domanda.
kiamlaluno

2
Ovviamente, sono nuovo qui ... ma i meta tag (in questo caso "8") aiutano con i risultati dei motori di ricerca? Sento che i titoli dei contenuti che contengono Drupal 8 o Drupal 7 potrebbero potenzialmente aiutare le persone a cercare risposte tramite Google ... solo un'idea però.
kraftybasterd,

Risposte:


26

Dopo aver fatto un po 'più di ricerca, sono stato in grado di trovare abbastanza pezzi in altre domande e su drupal.org per ottenere quello che volevo fare.

Non è necessaria alcuna pre-elaborazione per questa risposta, quindi non è necessario aggiungere alcun codice al file mytheme.theme.
Tutte queste variabili sono già accessibili in page.html.twig per impostazione predefinita.

Per eseguire il rendering del valore predefinito di un campo all'interno di page.html.twig, in genere si utilizza una variabile Twig come in {{ node.field_some_name.value }}.

Se si dispone di un campo immagine e si desidera eseguire il rendering dell'URL dell'immagine memorizzata in quel campo all'interno del modello page.html.twig, si utilizzerà {{ file_url(node.field_some_image.entity.fileuri) }}.

Infine, se si desidera eseguire il rendering del titolo di un nodo all'interno del modello page.html.twig, si utilizzerà {{ node.label }}.

Ho anche imparato ad usare alcuni condizionali Twig per il mio problema specifico, ma questo va oltre lo scopo di questa domanda / risposta.


Ero scettico, avendo l'impressione che in D7 questo genere di cose dovrebbe sempre essere in una funzione di pre-elaborazione. Tuttavia, l'esempio di file_url()in the documents ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) fa esattamente questo, quindi, è stato votato.
Graham C,

Come si fa a scorrere un determinato tipo di contenuto e ad emettere i valori dei suoi campi all'interno page.html.twig?
Naourass Derouichi,

2

Esistono tre metodi utili per lavorare con questo, che ti fanno risparmiare tempo a scavare in array di rendering complicati.

  1. Usando Display Suite (con il sottomodulo ds_extras) puoi assegnare alla regione dell'eroe un blocco ("regione del blocco") che è una modalità di visualizzazione diversa (cioè solo una contenente l'immagine dell'eroe). In questo modo vengono visualizzate due diverse modalità di visualizzazione contemporaneamente. Si noti che alcuni hook di preelaborazione potrebbero non attivarsi come ci si potrebbe aspettare se si esegue questa operazione.

  2. Il modulo twig_tweak semplifica notevolmente tali attività e può fornire istruzioni ramificate più semplici per i valori dei campi. Dai un'occhiata al cheat sheet per alcuni usi comuni: {{ drupal_field('field_image', 'node', 1) }}la firma della funzione è:drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)

  3. Il modulo twig_field_value rende le istruzioni ramoscello più semplici. Per README.txt:<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />

Se l'avessi saputo prima, mi avrebbe risparmiato un sacco di tempo!


1
Questa è la risposta corretta Nella mia esperienza, {{ node.field_some_name.value }}non rende il campo. Non invoca l'intero sistema di temi (funzione di preelaborazione, modello, ecc.). OTOH, se usi il twig_tweakmodulo, puoi ottenere il campo completamente renderizzato con{{ node.field_some_name|view }}
kentr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.