Amikor blockot kell kódból beágyazni, nem is lehet elegánsabb a sminkfüggvényen kívül előállítani a block html kódját. Íme egy saját "hook_". :)
function hook_rendered_block($modul, $block_id) {
$block = block_load($modul, $block_id);
$block_rendered = _block_get_renderable_array(_block_render_blocks(array($block)));
$html_block = drupal_render($block_rendered);
return $html_block;
}
Ezután a smink függvényben, tpl-ben, akárhol, csak meg kell hívni és visszaadja ami a megjelenítésbe kell. A block_load függvény rafinált, mert $bid-t vár, de sokszor nem egyértelmű, hogy mi a 'bid' értéke. Ha a block szerkesztés oldalon megnézed a block url-t, akkor megtalálsz benne mindent, amire szükséged lehet.
admin/structure/block/manage/$module/$block_id/configure
Persze a block objektumból ki is tudod puskázni, hogy pontosan mi a 'bid' értéke, és akkor azt is megadhatod. A félreértések elkerülése végett a $bid az eredeti paraméter neve a block_load függvénynek. Én azért hívom $blokk_id -nek, mert a tid, nid, bid -ről nekem mindig szám jut eszembe, ami itt elég pontatlan lenne.
Közben CsG kollégámtól jött egy újabb ötlet, az elegancia fokozására...
Mivel a .tpl fájlokban nem illik függvényeket hívogatni, D8-ban - ha minden igaz - a valóságban is így lesz (a mostani render() állapothoz képest), így a fenti függvény hívását áttettük a template.php-be, az adott preprocess függvénybe. Mivel a $variables értékén nem csak változtatni tudunk, de hozzáadni is, így ez már gyerekjáték...
$variables['blokk_neve'] = hook_rendered_block($modul, $block_id);
Ezután nincs más dolgunk mint a .tpl fájlban kiprintelni a tartalmat. A .tpl fájlhoz a $variables indexei kerülnek át egyszerűen meghívható változóként. Tehát a kiíratás a következőképpen fog történni...
print $blokk_neve;
Köszönet a segítségért!