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

12

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 le thème Drupal 8.

kraftybasterd
la source
2
@kiamlaluno - pourquoi avez-vous modifié ma question ?? Le fait d'avoir "Drupal 8" dans le titre ET dans la question le rend évident pour les fournisseurs de réponses potentiels ET le rend beaucoup plus facile à trouver dans Google, étant donné la prévalence du contenu Drupal 6 et 7; clarifier les questions / réponses de Drupal 8 est utile à la communauté dans son ensemble à la recherche de réponses spécifiques au D8. Je me demandais quel était votre raisonnement pour le changer.
kraftybasterd
Veuillez ne pas dupliquer les balises dans les titres des questions; les balises sont visibles partout où une question est visible, il n'est donc pas nécessaire d'utiliser des balises également dans le titre de la question.
kiamlaluno
2
Évidemment, je suis nouveau ici ... mais les balises META (dans ce cas, "8") aident-elles avec les résultats des moteurs de recherche? J'ai l'impression que les titres de contenu contenant Drupal 8 ou Drupal 7 pourraient potentiellement aider les gens à chercher des réponses via Google ... juste une idée cependant.
kraftybasterd

Réponses:

26

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 afficher la valeur par défaut d'un champ à l'intérieur de page.html.twig, vous utilisez généralement une variable Twig comme dans {{ node.field_some_name.value }}.

Si vous avez un champ d'image et que vous souhaitez rendre l'URL de l'image stockée dans ce champ à l'intérieur du modèle page.html.twig, vous utiliseriez {{ 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 devez utiliser {{ 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.

kraftybasterd
la source
J'étais sceptique, ayant l'impression qu'en D7 ce genre de chose devrait toujours être par exemple dans une fonction de prétraitement. Cependant, l'exemple de file_url()dans les documents ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) fait exactement cela, donc, voté positivement.
Graham C
Comment parcourez-vous un type de contenu spécifique et affichez-vous les valeurs de ses champs à l'intérieur page.html.twig?
Naourass Derouichi
2

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 de 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 considérablement ces tâches et peut fournir des instructions twig plus faciles pour les valeurs de champ. Jetez un œil à la feuille de triche pour certaines utilisations courantes: {{ 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 crée des instructions twig plus simples. 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!

HongPong
la source
1
Ceci est la bonne réponse. D'après mon expérience, {{ node.field_some_name.value }}ne rend pas le champ. Il n'invoque pas le système de thème complet (fonction de prétraitement, modèle, etc.). OTOH, si vous utilisez le twig_tweakmodule, vous pouvez obtenir le champ entièrement rendu avec{{ node.field_some_name|view }}
kentr