Drupal

Systemnamen von Blocks ermitteln und in Twig verwenden

Schlagworte:

Das Problem: Man möchte einen Drupal-Block, der von einem View bereitgestellt wird mit Hilfe einer Twig-Datei an einer ganz bestimmten Stelle ausgeben, z.B. unter einem Blogbeitrag. Das geht prinzipiell ganz ohne Twig über das Blocklayout unter admin/structure/block - in unserem Fall ist es ein Views-Block mit dem Systemnamen "block_similarterms". Dort trägt man den Blog z.B. im Abschnitt Inhalt ein und legt die Sichtbarkeit auf den Pfad eines Blogbeitrages mit /blog/* fest. So weit, so einfach.

Was aber, wenn die Ausgabe des Blogbeitrages mit Hilfe einer Twig-Datei speziell gestaltet wird? In diesem Fall kann man den gewünschten Block ganz einfach mit

{{ drupal_block('views_block:blog-block_similarterms') }}

an der gewünschten Position ausgeben. Vorausgesetzt man kennt den Systemnamen des Blocks. Den findet man natürlich im View rechts unter "Weitere >> Systemname". Dann muss man nur noch wissen, wie der restliche Teil des Parameters lautet. In unserem Beispiel wäre das "views_block:blog-". Wer das nicht parat hat, kann Drush zu Hilfe nehmen:

drush ev "print_r(array_keys(\Drupal::service('plugin.manager.block')->getDefinitions()));"

gibt eine vollständige Liste aller Systemblöcke aus, also alle Blöcke, die von Modulen wie Views, Webforms etc. bereitgestellt werden. Nicht jedoch die selbst angelegten Custom-Blocks!

Die Ausgabe sieht dann so aus:

...
    [51] => webform_block
    [52] => webform_submission_limit_block
    [53] => views_block:ansprechpartner-block_ansprech1
    [54] => views_block:blog-block_similarterms
    [55] => views_block:comments_recent-block_1
    [56] => views_block:content_recent-block_1
    [57] => views_block:frontpage-block_1
    [58] => views_block:frontpage-block_fp_aktuell
...

Nr. 54 ist der von uns gesuchte Block und jetzt müssen wir nur den Teil nach "=>" in den Twig-Befehl kopieren und der Block erscheint an der gewünschten Position.