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.
Réponses:
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.
la source
file_url()
dans les documents ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) fait exactement cela, donc, voté positivement.page.html.twig
?Il existe trois méthodes pratiques pour travailler avec cela, qui vous font gagner du temps à creuser dans des tableaux de rendu complexes.
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.
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)
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!
la source
{{ 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 letwig_tweak
module, vous pouvez obtenir le champ entièrement rendu avec{{ node.field_some_name|view }}