2010. június 3., csütörtök

Blokk betöltése tetszőleges helyre PHP-val

A Drupal a blokkokat alap esetbe előre definiált régiókban jeleníti meg. Így, például a tartalmi részen belül, már nem tudjuk őket elhelyezni. Lehetőség van azonban arra, hogy más módon töltsük be őket.
Problémánkat megoldhatjuk a module_invoke() függvénnyel. Használata nem túl bonyolúlt, csak ismernünk kell, hogy milyen paramétereket vár (A függvény hivatalos oldalán elég kevés tájékoztatót kapunk erről...).

Függvényhívás:
module_invoke('modulename', 'block' , 'view', display_id);

Paraméterek:
1: A modul neve, ami a megjelenítendő blokkot készíti
2: A megjelenítés típusa. Mindig legyen 'block'!
3: A hook_blokk() operandus ($op) típusa. Mindig legyen 'view'!
4: Azonosító

1. "Hagyományos" Drupal blokk betöltése (blokk, amely megjelenik a blokkok listája oldalon - /admin/build/block/list):

$block = module_invoke('block', 'block' , 'view', '5');
print $block['content'];

2. Más modul által készített blokk betöltése:

$block = module_invoke('panels_mini', 'block' , 'view', '3');
print $block['content'];

3. Views modul blokkjának betöltése:
Itt egy kicsit változik a hívás:
$block = module_invoke('views', 'block' , 'view', 'VIEWNAME-block_ID');

tehát így:

$block = module_invoke('views','block','view','hirek_admin-block_1');
print $block['content'];

vagy így:

$block = views_embed_view('hirek_admin', 'block_1');
print $block;

vagy így:

$viewname = 'VIEWNAME';
$display_id = 'block_1'; // or any other display
$args[0] = '17';

$view = views_get_view($viewname);
$view->set_display($display_id);
$view->set_arguments($args);
$block = $view->preview();
print $block ;

2 megjegyzés:

Apa54 írta...

Nézek, mint a hülye gyerek a moziban.

Szato írta...

Blogomban nem törekszem a teljességre és arra, hogy mindenki megértse. A bejegyzéseket sokkal inkább magam számára készítem "pótmemóriának", illetve azoknak akik konyítanak valamennyit a témához.

Megjegyzés küldése