J'essaie d'incorporer une vue dans un nœud spécifique. J'ai trouvé des tutoriels pour le faire avec Drupal 7 et PHP-Templates:
<?php print views_embed_view('view_name'); ?>
Mais je cherche un moyen dans Drupal 8 avec des modèles de brindilles. J'ai essayé d'appeler la views_embed_view()
fonction dans le hook_node_view()
et de l'affecter au nœud afin de pouvoir l'imprimer dans le modèle de brindille. Mais il semble que ce crochet ne soit jamais appelé.
Toutes les astuces / solutions comment faire cela à la manière de Drupal 8?
C'est ainsi que cela a fonctionné pour moi dans le sous-thème Drupal 8 beta 12 de Classy.
Dans le fichier your_theme.info.theme
J'ai copié le node.html.twig et entouré les balises d'article (ou la zone que vous souhaitez remplacer) avec un bloc de brindille. J'ai placé cela dans le dossier / template / content.
Ensuite, j'ai créé un nœud - 2.html.twig (remplacez 2 par le nœud souhaité) dans le dossier / template / content avec le code suivant.
la source
Le premier problème avec lequel vous vous battez est que les entités rendues comme les nœuds sont désormais mises en cache par défaut, donc hook_node_view () n'est appelé qu'une seule fois après un effacement du cache / enregistrement de ce nœud.
Cependant, c'est assez facile à désactiver, voir settings.local.php.
Ensuite, mettre la sortie d'une vue dans $ build est assez facile et fonctionne plus ou moins comme dans 7.x. Au lieu d'utiliser la fonction incorporée, pensez à utiliser $ views = Views :: getView () puis $ views-> buildRenderable ()
Deux astuces:
la source
settings.local.php
et effacé tous les caches. Mais mon crochetthemename_node_view()
dansthemename.theme
encore se pas appelé. Avez-vous une idée pourquoi cela pourrait être le cas?Comme Berdir a fait allusion à View-> buildRenderable, c'est ce que vous recherchez, mais pour donner un peu plus de contexte dans un module, vous devrez faire ce qui suit.
Ensuite, dans votre modèle de page, vous pouvez y accéder avec
la source
Dans les vues, vous pouvez créer un bloc avec vos données pertinentes.
Après la création du bloc, vous pouvez attribuer le bloc à apparaître dans la zone de contenu souhaitée (pied de page / en-tête / contenu / etc.). Attribuez-le, puis cliquez sur "configurer". Vous devriez pouvoir "Afficher le bloc sur des pages spécifiques". La sélection de "Uniquement les pages répertoriées" et l'ajout de / node / your-node-number à la spécification de page devrait limiter cette vue / bloc à n'apparaître qu'avec le nœud souhaité.
À votre santé!
la source
views_embed_view()
approche est beaucoup plus facile et plus propre, je suppose.Je sais que vous mentionnez que vous souhaitez utiliser des modèles de brindilles, mais vous pouvez utiliser le module Views Reference Field pour éviter d'avoir à fouiller dans les modèles. Donne également l'avantage de pouvoir l'ajouter à n'importe quelle entité pouvant être mise en champ afin que les éditeurs de contenu puissent configurer la vue / sortie.
la source