Hay dos tipos de bloques, y el método para representarlos es un poco diferente:
Bloques de contenido
Los bloques de contenido son bloques que crea en la interfaz. Se parecen mucho a las estructuras de datos configurables de los nodos, con campos, etc. Si desea representar uno de estos, puede hacer lo que normalmente haría con las entidades, cargarlas y representarlas con el generador de vistas:
$bid = ??? // Get the block id through config, SQL or some other means
$block = \Drupal\block_content\Entity\BlockContent::load($bid);
$render = \Drupal::entityTypeManager()->
getViewBuilder('block_content')->view($block);
return $render;
Bloques de complementos
Los bloques también pueden ser complementos, definidos en varios módulos. Un ejemplo podría ser el bloque de migas de pan. Si desea renderizarlos, deberá usar el administrador de complementos de bloque.
$block_manager = \Drupal::service('plugin.manager.block');
// You can hard code configuration or you load from settings.
$config = [];
$plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config);
// Some blocks might implement access check.
$access_result = $plugin_block->access(\Drupal::currentUser());
// Return empty render array if user doesn't have access.
// $access_result can be boolean or an AccessResult class
if (is_object($access_result) && $access_result->isForbidden() || is_bool($access_result) && !$access_result) {
// You might need to add some cache tags/contexts.
return [];
}
$render = $plugin_block->build();
// In some cases, you need to add the cache tags/context depending on
// the block implemention. As it's possible to add the cache tags and
// contexts in the render method and in ::getCacheTags and
// ::getCacheContexts methods.
return $render;
Entidades de configuración
Compartidos para los dos tipos son bloques, es decir, una vez que los inserte en una región, creará una entidad de configuración que tiene todas las configuraciones para el bloque. En algunos casos será más útil manejar entidades de configuración. Dado que el mismo bloque se puede colocar en múltiples regiones con y con una configuración diferente, puede ser más complicado usar las entidades de configuración de bloque. Lo bueno es que es posible que desee renderizar un bloque con una configuración específica, lo malo es que los identificadores de configuración pueden cambiar jugando con la interfaz, por lo que el código podría no funcionar después de permitir que los usuarios usen la interfaz de bloque.
$block = \Drupal\block\Entity\Block::load('config.id');
$render = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
return $render;