Een blok invoegen in elk sjabloon (drupal insert block into template)
Drupal 8
In een Twig-sjabloon kun je geen PHP-code aanroepen, daarom moet je het blok al voorbereid naar de sjabloon sturen. Als je een variabele naar een node-sjabloon wilt doorgeven, kun je de functie themename_preprocess_node() in je thema gebruiken; voor een pagina-sjabloon gebruik je themename_preprocess_page(). Je geeft de variabele door aan de Twig-sjabloon, en daarin wordt ze weergegeven.
Blokken aangemaakt via de admin-interface
$block = \Drupal\block\Entity\Block::load('your_block_id');
$variables['block_output'] = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
Voor de functie themename_preprocess_node() (de node-sjabloon) kan dit blok als volgt worden weergegeven:
function themename_preprocess_node(&$variables) {
$block = \Drupal\block\Entity\Block::load('your_block_id');
$variables['block_output'] = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
}
In het sjabloon node.html.twig kun je het blok nu weergeven met:
{{ block_output }}
Blokken aangemaakt via plugins
Dergelijke blokken kunnen op dezelfde manier worden weergegeven als blokken uit de admin-interface, alleen is de code hiervoor iets anders:
$block_manager = \Drupal::service('plugin.manager.block');
// Je kunt hier je eigen configuratie voor het blok toevoegen.
$config = [];
$plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config);
// Sommige blokken hebben toegangsrechten nodig.
$access_result = $block_plugin->access(\Drupal::currentUser());
// Geeft een lege array terug als er geen toegang is.
if ($access_result->isForbidden()) {
return [];
}
$render = $plugin_block->build();
// Hier kun je eventueel cache-tags of contexten toevoegen.
// Je kunt ook cache-tags en contexten definiëren in de methoden render(), ::getCacheTags, ::getCacheContexts.
return $render;
Dezelfde code zonder opmerkingen:
$block_manager = \Drupal::service('plugin.manager.block');
$config = [];
$plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config);
$access_result = $block_plugin->access(\Drupal::currentUser());
if ($access_result->isForbidden()) {
return [];
}
$render = $plugin_block->build();
return $render;
Drupal 7
Voor Drupal 7 is de functie hetzelfde, maar de parameters zijn iets anders. In plaats van twee parameters block en view gebruiken we één: block_view.
print render(module_invoke('block', 'block_view', '12'));
Voor Views-blokken ziet de invoeging er zo uit:
print render(module_invoke('views', 'block_view', 'feedbacks-block'));
Zo voegen we in Drupal 7 een Views-blok in. Let op dat in de delta voor het eerste blok het bloknummer ontbreekt — we schrijven gewoon feedbacks-block.
Drupal 6
Om een blok op een gewenste plaats in te voegen, gebruik je de functie module_invoke():
$block = module_invoke('views', 'block', 'view', 'block_name');
print $block['content'];
Als je een blok wilt invoegen dat via de admin-interface is aangemaakt, gebruik dan de volgende code:
$block = module_invoke('block', 'block', 'view', 12);
print $block['content'];
Hier is 12 het bloknummer, oftewel de delta.
Als we een Views-blok willen invoegen, doen we dat als volgt:
$block = module_invoke('views', 'block', 'view', 'feedbacks-block_1');
print $block['content'];
Hier is feedbacks-block_1 de naam van het blok binnen de view, feedbacks de naam van de view zelf, en block_1 de naam van de display in die view.