Zdravim, mam takovy problemek. Mam klasicke tema vzhledu s regiony left sidebar, content, right sidebar a pod. No a do Content se standardne vypisuje blok Obsah hlavni stranky. A jelikoz je timto obsahem pouze jedna staticka stranka (Node) tak bych potreboval aby se k tomu vypisoval jeste blok s jednim View (kalendar). To jde udelat standardne, ale tak se vypisou oba bloky "pod sebe" a ja bych potreboval aby ten kalendar byl uvnitr toho bloku obsah (tedy blok uvnitr bloku). A to vse jen pro titulni stranku.
A tady uz tapu zda zkust nejake upravy templates nebo snad nejakou preprocess funkci????
Diky
TC
Dekuji, je to naprosto srozumitelne - tez me to dle teoretickych znalosti z knizky napadlo, ale nebyl jsem si jisty praktickoy realizaci ;-) Navic jsem me dojem ze by mela byt nejaka funkce primo na vypis bloku aniz bych musel pridavat region.
TC
Tedy - jak se tak na to jeste divam tak uz mi to vsude jasne neprijde - co vlastne delat ten IF v preprocess funkci pro node? Ja tomu rozumim tak ze otestuje zda ten muj novy region obsahuje nejake bloky (bude vzdy splneno - to je to co udelam) a potom si tyto bloky (v mem pripade jeden) ulozi do promene, kterou pote v node.tpl.php zobrazi.
Ale v cem je to jine nez kdybych jak je napsano na zacatku v node.tpl.php rovnou dal print render(block_get_blocks_by_region('strojovy_nazev_regionu')); ??
Dale predpokladam ze bude nutne si v node.tpl.php osetrit vypis toho regionu pouze na titulni strance (pocitam pres test promenne $is_front).
Diky
TC
Šetří to paměť, jestli to chápu správně. Pokud nejsou k vypsání žádné bloky, pak se nebude předávat nic do node.tpl.php.
Když si nastavíte, že blok má v daném regionu být jen na titulce, tak jinde se vám i po výpisu regionu nezobrazí. Respektive nejde k vypsání toho regionu na vnitřních stranách.
Jinak, vypsat jde i přímo blok, nejenom regiony, a to takto:
$block = module_invoke('block','block_view','delta');
$block_display = render($block['content']);
Za delta si dejte příslušný identifikátor bloku. Spoustu dalších příkladů a jiných volání najdete na drupal.org/node/1034524.
Zkousel jsem vsechny mozne varianty z uvedeneho odkazu a vzdy to konci s 2x opakovanou hlaskou:
Notice: Trying to get property of non-object ve funkci block_block_view() (řádek: 245 v souboru /users/zalohovane/zusorchidea.com/test/modules/block/block.module).
Na to sem nasel jediny odkaz na jakousi upravu v block.module ale ta zpusobila jen ze hlaska zmizela ale block se porad nezobrazuje :(
TC
Tak nakonec zafungovalo vicero variant:
1) Pouziti zmineneho zpusobu pridani bloku do noveho regionu a vypsani pres <em>print render(block_get_blocks_by_region('nazev_regionu'));</em>
2) Pouziti varianty
<code>
<?php
$block = module_invoke('views', 'block_view', 'nazev_bloku');
print render($block);
?>
</code>
Tady ovsem byly vypsany jednotlive objekty ktere prosly filtrem daneho view, ale bez napr. nazvu toho view nebo obalujicich znacek a class - coz neni problem doresit rucne.
3) Pripadne jeste zafungovalo
<code>
<?php
$block = block_load('views', 'nazev_bloku
');
$output = drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
print $output;
?>
</code>
Coz vypsalo i titulek view, ale moc jasne mi ty funkce neprijdou.
Nakonec zustavam u varianty 1) coz me prijde jako nejcistsi reseni.
TC
A tohle mi taky nejde :( Normalne jsem do .info souboru pridal novy rade:
regions[calendar] = Calendar
V administraci bloku se objevil normalne dostupnu, takze jsem do nej presunul ten blok s kalendarem (nastaveni zobrazit vsude)
A v node.tpl.php jsem pridal:
// Puvodni
print render($content);
// Pridano
print "DEBUG:";
print render(block_get_blocks_by_region('calendar'));
Dobrý den, v tomto případě bych o řešil tak, že výpis bloku s Views bych dal do nového regionu, který budu volat v šabloně node.tpl.php.
Vypsání bloků v konkrétním regionu (použitelné kdekoli):
print render(block_get_blocks_by_region('strojovy_nazev_regionu'));
Případně v kombinaci template.php a node.tpl.php:
Do template.php dáte/upravíte:
function nazev_tematu_vzhledu_preprocess_node(&$variables) {
if ($blocks = block_get_blocks_by_region('strojovy_nazev_regionu')) {
$variables['muj_region'] = $blocks;
}
}
a do node.tpl.php toto:
<?php print render($muj_region); ?>