J'ai besoin de rendre un bloc de vues dans mon modèle page.html.twig. En D7, je ferais ceci:
<?php
$block = module_invoke('module_name', 'block_view', 'block_delta');
print render($block['content']);
?>
Dans Drupal 8 module_invoke est obsolète et recommandé d'utiliser ceci: (j'ai ajouté le nom du bloc comme deuxième paramètre)
Drupal::moduleHandler()->invoke($block, 'views_block__blog_block_1', $args = array());
J'ai essayé quelques trucs. J'ai d'abord essayé de le faire dans un modèle de brindille mais je ne sais pas comment appeler les fonctions php dans un modèle de brindille, donc cela ne s'est pas bien passé.
Ensuite, j'ai appelé la fonction dans la fonction preprocess_page () du fichier .theme mais avant de pouvoir la faire fonctionner, j'ai essayé quelque chose de plus simple juste pour essayer de faire fonctionner une variable dans le modèle de brindille qui ne fonctionnait pas non plus, par exemple:
Dans la fonction template_preprocess_page (& $ vars) du fichier .theme:
$test = 'Hello World';
$vars['$my_var'] = $test;
J'ai essayé d'appeler my_var à l'intérieur du modèle de brindille mais cela n'a pas fonctionné et j'ai reçu un message d'erreur disant "Le site a une erreur, veuillez contacter l'administrateur"
Donc, pour résumer, voici mes questions:
- Comment rendre les variables disponibles dans les modèles de brindilles?
- Comment appeler des fonctions dans des modèles de brindilles?
- Dois-je rendre des blocs à l'intérieur du fichier .theme ou du modèle de brindille?
Dans Drupal 8, cela fonctionne pour le rendu d'un plugin de bloc (c'est-à-dire, que vous avez créé dans un module personnalisé) dans un preprocess_hook:
Vous pouvez ensuite le rendre dans votre modèle de brindille comme ceci:
Remarque: cela chargera une version générique de votre bloc. Si vous souhaitez charger une instance de votre bloc avec des variables (après l'avoir créée dans / admin / structure / block), vous devez la charger de cette façon:
la source
Vous pouvez utiliser le module Twig tweak pour cela, puis vous pouvez utiliser la syntaxe suivante:
Connexe: Comment puis-je placer un bloc par programme?
la source