Es gibt zwei Arten von Blöcken, und die Methode zum Rendern der beiden ist etwas unterschiedlich:
Inhaltsblöcke
Inhaltsblöcke sind Blöcke, die Sie in der Benutzeroberfläche erstellen. Sie ähneln Datenstrukturen, die mit Knoten konfiguriert werden können, mit Feldern usw. Wenn Sie eine dieser Strukturen rendern möchten, können Sie das tun, was Sie normalerweise mit Entitäten tun würden. Laden Sie sie und rendern Sie sie mit dem View Builder:
$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;
Plugin-Blöcke
Blöcke können auch Plugins sein, die in verschiedenen Modulen definiert sind. Ein Beispiel könnte der Paniermehlblock sein. Wenn Sie diese rendern möchten, müssen Sie den Block-Plugin-Manager verwenden.
$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;
Entitäten konfigurieren
Gemeinsam für die beiden Typen sind Blöcke. Wenn Sie sie in eine Region einfügen, erstellen Sie eine Konfigurationsentität, die alle Einstellungen für den Block enthält. In einigen Fällen ist es sinnvoller, mit Konfigurationsentitäten umzugehen. Da derselbe Block in mehreren Regionen mit und mit unterschiedlicher Konfiguration platziert werden kann, kann die Verwendung der Blockkonfigurationsentitäten schwieriger werden. Das Schöne ist, dass Sie möglicherweise einen Block mit einer bestimmten Konfiguration rendern möchten. Das Schlechte ist, dass sich die Konfigurations-IDs ändern können, wenn Sie an der Schnittstelle herumspielen, sodass der Code möglicherweise nicht funktioniert, nachdem Benutzer die Blockschnittstelle verwenden dürfen.
$block = \Drupal\block\Entity\Block::load('config.id');
$render = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
return $render;