web-dev-qa-db-fra.com

Rendre le champ d'image à partir du nœud dans page.html.twig

Je fais mes premiers pas avec Drupal 8. J'ai un site avec une image d'en-tête. Sur un type de contenu spécifique "Blog", je veux remplacer l'image d'en-tête standard par une image d'en-tête spécifique au nœud. Ainsi, dans le type de contenu "Blog", j'ai créé un champ d'image "field_headerimage". J'ai également permis de créer un type de contenu spécifique page.html.twig, voir https://drupal.stackexchange.com/a/141397/31981 . Cela fonctionne.

Problème: Je veux rendre field_headerimage dans page.html.twig. Il existe une variable "node", mais il semble que ces valeurs ne puissent pas être rendues.

4
Andreas Gyr

Je dirais que la méthode Twig-ish consiste à créer un filtre personnalisé. La méthode Drupal-ish consiste à utiliser un hook_preprocessor. L'idée générale de la réécriture MVC est de garder la logique hors des modèles. Je ne voyais pas comment ajouter des filtres Twig dans Drupal 8 (n'importe qui?), Donc je vais utiliser le préprocesseur.

Drupal 8 préprocesseur

Dans votre thème template.php:

function mytheme_preprocess_page(&$variables) {
  if ( $variables['node'] ) {
    $node = $variables['node'];
    // Optionally limit by bundle type. How do you get a bundle in D8?
    // if ( $bundle != 'blog' ) return;
    // Get your image URI.
    $header_image = $node->get('headerimage')->value;
    // Just guessing here: not sure what to do but it may involve styles.
    $header_uri = $header_image->getFileUri();
    // Override the variable that normally stores the header image.
    // Not sure what that would be. Look in page.html.twig
    $variables['headerimage'] = $header_uri;
  }
} 
4
Queenvictoria