Insertion d’un bloc dans n’importe quel template (Drupal insert block into template)
Drupal 8
Dans un template Twig, il n’est pas possible d’exécuter du code PHP directement. Il faut donc passer un bloc déjà préparé au template. Si vous devez transmettre une variable à un template de nœud, vous pouvez utiliser la fonction themename_preprocess_node()
dans votre thème, ou pour un template de page, themename_preprocess_page()
. Vous transmettez la variable au template Twig, puis vous l’affichez dans celui-ci.
Blocs créés via l’interface d’administration
$block = \Drupal\block\Entity\Block::load('your_block_id'); $variables['block_output'] = \Drupal::entityTypeManager() ->getViewBuilder('block') ->view($block);
Pour la fonction themename_preprocess_node()
(template node), vous pouvez afficher ce bloc ainsi :
function themename_preprocess_node(&$variables) { $block = \Drupal\block\Entity\Block::load('your_block_id'); $variables['block_output'] = \Drupal::entityTypeManager() ->getViewBuilder('block') ->view($block); }
Dans le template node.html.twig
, vous affichez ensuite le bloc :
{{ block_output }}
Blocs créés via plugins
Ces blocs peuvent être affichés de la même façon que ceux créés via l’administration, mais le code est un peu différent :
$block_manager = \Drupal::service('plugin.manager.block'); // Vous pouvez définir vos configurations ici. $config = []; $plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config); // Certains blocs peuvent avoir des restrictions d'accès. $access_result = $plugin_block->access(\Drupal::currentUser()); // Renvoie un tableau vide si l'accès est refusé. if ($access_result->isForbidden()) { return []; } $render = $plugin_block->build(); // Vous pouvez ajouter ici des tags ou contextes de cache. // Ces tags et contextes peuvent aussi être définis dans les méthodes render(), ::getCacheTags(), ::getCacheContexts(). return $render;
Sans les commentaires :
$block_manager = \Drupal::service('plugin.manager.block'); $config = []; $plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config); $access_result = $plugin_block->access(\Drupal::currentUser()); if ($access_result->isForbidden()) { return []; } $render = $plugin_block->build(); return $render;
Drupal 7
Pour Drupal 7, la fonction est similaire, mais les paramètres diffèrent légèrement. Au lieu de deux paramètres block
et view
, on utilise un seul paramètre block_view
:
print render(module_invoke('block', 'block_view', '12'));
Pour un bloc Views, l’insertion ressemble à ceci :
print render(module_invoke('views', 'block_view', 'feedbacks-block'));
Notez que pour le delta du bloc, on utilise directement le nom du bloc Views, sans numéro, ici feedbacks-block
.
Drupal 6
Pour insérer un bloc à l’endroit voulu, utilisez la fonction module_invoke()
:
$block = module_invoke('views', 'block', 'view', 'block_name'); print $block['content'];
Par exemple, pour insérer un bloc créé via l’administration, utilisez ce code :
$block = module_invoke('block', 'block', 'view', 12); print $block['content'];
Où 12 est le numéro (delta) du bloc.
Pour insérer un bloc Views, faites comme ceci :
$block = module_invoke('views', 'block', 'view', 'feedbacks-block_1'); print $block['content'];
Où feedbacks-block_1
est le nom du bloc dans la vue, feedbacks
est le nom de la vue, et block_1
est le nom de l’affichage dans cette vue.