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.