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.
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;
}
}