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_AFFICHAGEpar 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_AFFICHAGEpar 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
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 complexe.
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.
Ajouter un commentaire