Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Insert block into any template (drupal insert block into template)

16/04/2025, by Ivan

Drupal 8

In a Twig template, you can't call PHP code directly, so you need to pass a ready-made block into the template. If you need to pass a variable into a node template, you can use the themename_preprocess_node() function in your theme. For the page template, use themename_preprocess_page(). Pass the variable to the Twig template, and then output it there.

Blocks created via the admin interface

$block = \Drupal\block\Entity\Block::load('your_block_id');
$variables['block_output'] = \Drupal::entityTypeManager()
  ->getViewBuilder('block')
  ->view($block);

In the themename_preprocess_node() function (for a node template), this block can be rendered as follows:

function themename_preprocess_node(&$variables) {
  $block = \Drupal\block\Entity\Block::load('your_block_id');
  $variables['block_output'] = \Drupal::entityTypeManager()
    ->getViewBuilder('block')
    ->view($block);
}

In the node.html.twig template, you can now render the block like this:

{{ block_output }}

Blocks created via plugins

These blocks can be rendered similarly to those created via the admin UI, but the rendering code differs slightly:

$block_manager = \Drupal::service('plugin.manager.block');
// You can define block-specific configuration here.
$config = [];
$plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config);
// Some blocks may have access restrictions.
$access_result = $plugin_block->access(\Drupal::currentUser());
// Returns an empty array if access is denied.
if ($access_result->isForbidden()) {
  return [];
}
$render = $plugin_block->build();
// You may need to add cache tags or contexts here.
// Also consider adding cache tags or contexts in the render() method, ::getCacheTags, or ::getCacheContexts.
return $render;

The same code without comments:

$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

For Drupal 7, the function is similar, but the parameters differ slightly. Instead of two parameters, block and view, we use one: block_view.

print render(module_invoke('block', 'block_view', '12'));

To insert a views block, it looks like this:

print render(module_invoke('views', 'block_view', 'feedbacks-block'));

This is how we insert a views block in Drupal 7. Note that for the first block, we omit the block number in the delta and just write feedbacks-block.

Drupal 6

To insert a block where needed, use the module_invoke() function:

$block = module_invoke('views', 'block', 'view', 'block_name');
print $block['content'];

For example, to insert a block created via the admin UI, use the following code:

$block = module_invoke('block', 'block', 'view', 12);
print $block['content'];

Where 12 is the block's delta ID.

To insert a views block, do it like this:

$block = module_invoke('views', 'block', 'view', 'feedbacks-block_1');
print $block['content'];

Where feedbacks-block_1 is the block name in the view: feedbacks is the view name, and block_1 is the display name within that view.