Il existe deux types de blocs et la méthode de rendu des deux est un peu différente:
Blocs de contenu
Les blocs de contenu sont des blocs que vous créez dans l'interface. Ils ressemblent beaucoup à des structures de données configurables par nœuds, avec des champs, etc.
$bid = ??? // Get the block id through config, SQL or some other means
$block = \Drupal\block_content\Entity\BlockContent::load($bid);
$render = \Drupal::entityTypeManager()->
getViewBuilder('block_content')->view($block);
return $render;
Blocs de plugin
Les blocs peuvent également être des plugins, définis dans différents modules. Un exemple pourrait être le bloc de fil d'Ariane. Si vous voulez les rendre, vous devrez utiliser le gestionnaire de plugins de blocs.
$block_manager = \Drupal::service('plugin.manager.block');
// You can hard code configuration or you load from settings.
$config = [];
$plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config);
// Some blocks might implement access check.
$access_result = $plugin_block->access(\Drupal::currentUser());
// Return empty render array if user doesn't have access.
// $access_result can be boolean or an AccessResult class
if (is_object($access_result) && $access_result->isForbidden() || is_bool($access_result) && !$access_result) {
// You might need to add some cache tags/contexts.
return [];
}
$render = $plugin_block->build();
// In some cases, you need to add the cache tags/context depending on
// the block implemention. As it's possible to add the cache tags and
// contexts in the render method and in ::getCacheTags and
// ::getCacheContexts methods.
return $render;
Entités de configuration
Les blocs sont partagés pour les deux types, c'est qu'une fois que vous les insérez dans une région, vous allez créer une entité de configuration qui possède tous les paramètres du bloc. Dans certains cas, il sera plus utile de gérer les entités de configuration. Étant donné que le même bloc peut être placé dans plusieurs régions avec et avec une configuration différente, il peut être plus difficile d'utiliser les entités de configuration de bloc. La bonne chose est que vous pourriez vouloir rendre un bloc avec une configuration spécifique, la mauvaise chose est que les identifiants de configuration peuvent changer en jouant avec l'interface, de sorte que le code pourrait ne pas fonctionner après avoir laissé les utilisateurs utiliser l'interface de bloc.
$block = \Drupal\block\Entity\Block::load('config.id');
$render = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
return $render;