web-dev-qa-db-fra.com

Rendre un champ de noeud à l'intérieur de page.html.twig

J'ai un champ d'image sur mon type de contenu (field_hero_image).

Je ne veux pas qu'il soit rendu dans le fichier node.html.twig. Cependant, je veux le rendre dans le fichier page.html.twig. Plus précisément, je veux le rendre à côté du titre de la page.

Quel code dois-je utiliser dans mon fichier page.html.twig pour accéder aux champs au niveau du nœud et les rendre?

(Il y a une question similaire publiée, mais je n'ai pas pu utiliser la réponse fournie pour résoudre mon problème.)

Ceci pour Drupal 8 thème.

12
kraftybasterd

Après avoir fait un peu plus de recherche, j'ai pu trouver suffisamment de pièces dans d'autres questions et sur drupal.org pour réaliser ce que je voulais faire.

Aucun pré-traitement n'est nécessaire pour cette réponse, donc aucun code ne doit être ajouté à votre fichier mytheme.theme.
Toutes ces variables sont déjà accessibles par défaut dans page.html.twig.

Pour rendre la valeur par défaut d'un champ à l'intérieur de page.html.twig, vous utiliseriez généralement une variable Twig comme dans {{ node.field_some_name.value }}).

Si vous avez un champ d'image et souhaitez rendre l'URL de l'image stockée dans ce champ à l'intérieur du modèle page.html.twig, vous utiliserez {{ file_url(node.field_some_image.entity.fileuri) }}.

Enfin, si vous souhaitez afficher le titre d'un nœud à l'intérieur du modèle page.html.twig, vous utiliserez {{ node.label }}.

J'ai également appris à utiliser certaines conditions Twig pour mon problème particulier, mais cela dépasse le cadre de cette question/réponse.

26
kraftybasterd

Il existe trois méthodes pratiques pour travailler avec cela, qui vous font gagner du temps à creuser dans des tableaux de rendu complexes.

  1. En utilisant Display Suite (avec le sous-module ds_extras), vous pouvez affecter à la région du héros un bloc ("région du bloc") qui est un mode d'affichage différent (c'est-à-dire un seul contenant l'image du héros). Ainsi, vous obtenez deux modes d'affichage différents en même temps. Notez que certains hooks de prétraitement peuvent ne pas se déclencher comme vous pouvez vous y attendre si vous procédez ainsi.

  2. Le module twig_Tweak simplifie grandement ces tâches et peut donner des instructions plus simples twig pour les valeurs des champs. Jetez un œil à la feuille de triche pour certains utilise: {{ drupal_field('field_image', 'node', 1) }} La signature de la fonction est: drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)

  3. Le module twig_field_value simplifie les instructions twig. Par README.txt: <img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />

Si je l'avais su plus tôt, cela m'aurait fait gagner beaucoup de temps!

2
HongPong