Drupal - Afficher un bloc où l'on veut

Cet article a été écrit il y a plus de quatre ans, son contenu n'est peut-être plus d'actualité.

On commence par récupérer le service de gestion des blocks :

$block_manager = \Drupal::service('plugin.manager.block');

Bloc « classique »

On construit le bloc que l'on souhaite via son id

$block_array = $block_manager->createInstance('system_breadcrumb_block', []);

Bloc généré par une vue

Pour un bloc généré via une vue il faut utiliser le format 

views_block:ID_VUE-ID_AFFICHAGE

par exemple : 

$block_array = $block_manager->createInstance('views_block:articles_recents-block_1', []);

Bloc formulaire exposé d'une vue

Pour un formulaire exposé (dans le cas d'une vue de recherche par exemple : 

views_exposed_filter_block:ID_VUE-ID_AFFICHAGE

par exemple : 

$block_array = $block_manager->createInstance('views_exposed_filter_block:recherche-page', []);

Génération du bloc

On génère le renderable array :

$block_renderable = $block_array->build()

et voila, plus qu'à l'afficher dans un template.

En plus court cela peut donner ça :

$block_manager = \Drupal::service('plugin.manager.block');
$variables['breadcrumbs']= [
    '#type' => 'container',
    "element-content" => $block_manager->createInstance('system_breadcrumb_block', [])->build(),
];

et dans le template twig :

{{ breadcrumbs }}

 

Contenus en rapport

snippet · 17 Oct 2022 Drupal 9 - Désactiver un bloc pour une page spécifique Drupal propose un mécanisme en backoffice pour contrôler l'affichage des blocs, mais il est nécessaire parfois de mettre en place une logique un peu plus… snippet · 15 Oct 2020 Drupal - Afficher un formulaire dans un bloc ou un contrôleur Il est possible dans un contrôleur ou un bloc de récupérer un formulaire et de l'afficher comme n'importe quelle autre variable. À l'époque de drupal 7 on…

Commentaires (0)