Gérer l'affichage d'un noeud en Drupal 8

Objectif

Gérer l'affichage d'un noeud dans Drupal 8 ou Comment insérer une vue dans un noeud en Drupal 8

Situation actuelle

Drupal 8 est actuellement en Beta 4 et les modules offrant une interface pour gérer l'affichage du contenu (Panels, Display suites, etc.) ne sont pas encore prêts, nous nous sommes tournés vers le thème et le nouvel environnement Twig.

Résultat

Si vous êtes familier avec Drupal, vous savez que les maux de têtes pour gérer l'affichage sont nombreux. Dans Drupal 6 et 7, il fallait souvent trouver quel hook appeler pour gérer chaque petit aspect du contenu et, pour cela, les interfaces utilisateurs étaient de véritables anges descendus du ciel.

En fouillant dans le Drupal 8, je découvre une simplicité qui est la bienvenue...  Twig est une nouveauté qui se découvre assez aisément, et l'approche utilisée pour construire le contenu est beaucoup plus simple.

Dans notre cas, nous souhaitions afficher une vue à l'intérieur d'un type de contenu, entre le titre et le corps..

À noter que nous utilisons Adaptive Theme.

Première étape, nous créons un template de noeud spécifique à notre type de contenu, qui pour l'exercice sera "article". Donc dans themes/montheme/templates/node/ nous faisons une copie de node.html.twig que nous appellerons node--article.html.twig

Ensuite, dans theme/montheme, nous modifierons le fichier montheme.theme afin d'activer le preprocess_node. nous pourrons ainsi altérer le contenu de $variables et par le fait même ajouter de nouveaux éléments à la diposition du node--article.html.twig

function montheme_preprocess_node(&$variables) {
  $bundle = $variables['node']->bundle();
  if($bundle == 'article'){
    $variables['article_head'] = views_embed_view('myview_articlehead', 'default');
  }
}

 

Nous avons désormais une variable "article_head" qui est disponible dans notre fichier twig. Nous retournons dans celui-ci et sous le </header> qui contient le titre et "submitted" nous allons faire afficher notre vue ainsi :

 

{{ article_head }}