Einfügen eines Blocks in eine beliebige Template-Datei (Drupal Insert Block into Template)
Drupal 8
Im Twig-Template kann kein PHP-Code ausgeführt werden, deshalb muss der fertige Block an das Template übergeben werden. Wenn Sie eine Variable an das Node-Template übergeben wollen, können Sie die Funktion themename_preprocess_node() im Theme verwenden, für das Page-Template themename_preprocess_page(). Dort übergeben Sie die Variable an das Twig-Template und geben sie dort aus.
Blöcke, die über das Admin-Interface erstellt wurden
$block = \Drupal\block\Entity\Block::load('your_block_id');
$variables['block_output'] = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
Für die Funktion themename_preprocess_node() (Node-Template) kann der Block so ausgegeben werden:
function themename_preprocess_node(&$variables) {
$block = \Drupal\block\Entity\Block::load('your_block_id');
$variables['block_output'] = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
}
Im Template node.html.twig kann der Block dann folgendermaßen ausgegeben werden:
{{ block_output }}
Blöcke, die als Plugins erstellt wurden
Diese Blöcke können ähnlich wie die über das Admin-Interface erstellten Blöcke ausgegeben werden, nur der Code für die Ausgabe ist etwas anders:
$block_manager = \Drupal::service('plugin.manager.block');
// Eigene Konfiguration für den Block kann hier gesetzt werden.
$config = [];
$plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config);
// Manche Blöcke haben unterschiedliche Zugriffsrechte.
$access_result = $plugin_block->access(\Drupal::currentUser());
// Gibt ein leeres Array zurück, wenn kein Zugriff besteht.
if ($access_result->isForbidden()) {
return [];
}
$render = $plugin_block->build();
// Hier können Cache-Tags oder Kontexte hinzugefügt werden.
// Auch möglich in den Methoden render(), getCacheTags(), getCacheContexts().
return $render;
Der gleiche Code ohne Kommentare:
$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
Für Drupal 7 ist die Funktion ähnlich, aber die Parameter sind etwas anders, statt zwei Parametern (block, view) verwendet man einen Parameter block_view:
print render(module_invoke('block', 'block_view', '12'));
Für Views sieht die Blockeinbindung so aus:
print render(module_invoke('views', 'block_view', 'feedbacks-block'));
So binden wir in Drupal 7 einen Views-Block ein. Beachten Sie, dass in der Delta für den ersten Block keine Blocknummer mehr steht, sondern einfach feedbacks-block.
Drupal 6
Um einen Block an einer bestimmten Stelle einzufügen, verwenden Sie die Funktion module_invoke():
$block = module_invoke('views', 'block', 'view', 'block_name');
print $block['content'];
Wenn Sie beispielsweise einen über das Admin-Interface erstellten Block einfügen wollen, verwenden Sie diesen Code:
$block = module_invoke('block', 'block', 'view', 12);
print $block['content'];
Dabei ist 12 die Nummer (Delta) des Blocks.
Wenn Sie einen Views-Block einfügen, machen Sie es so:
$block = module_invoke('views', 'block', 'view', 'feedbacks-block_1');
print $block['content'];
Dabei ist feedbacks-block_1 der Name des Blocks in Views, feedbacks der Name der View und block_1 der Name des Displays in dieser View.