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.