Drupal 8 Tip: how to embed a region in a node template
In Drupal 7, you could use get_blocks_by_region to get an array of blocks from a particular region, then pass that as a variable to your template file. In Drupal 8, blocks_get_blocks_by_region has been removed. View_get_view and hook_block_view have also been removed, so you can't use those to embed a block or view directly in a template file.
To embed a region in a node template, in Drupal 8, we can use entity_load_multiple_by_properties to get an array of the blocks assigned to that region, then use that to pass an array of blocks as a variable to the template file.
function yourtheme_preprocess_node(&$variables){
$blocks = entity_load_multiple_by_properties('block', array('theme' => 'yourtheme', 'region' => 'yourregion'));
uasort($blocks, 'Drupal\block\Entity\Block::sort');
$build = array();
foreach ($blocks as $key => $block) {
if ($block->access('view')) {
$build[$key] = entity_view($block, 'block');
}
}
$variables['sidebar_region'] = $build;
}
Then you can render the sidebar_region variable in your twig template like this:
{{ sidebar_region }}