Saját címlap készítése

Ebben a cikkben az admin modul kódjából kiindulva, kis változtatásokkal eljutunk egy olyan új modulig, amely webhelyünk címlapját is kiszolgálhatja. Azért esett a választás a címlapra, mert itt gyakorta teljesen egyedi oldalszerkezettel találkozhatunk. Ha már értünk egy kicsit a PHP programozáshoz, akkor ez egyáltalán nem nehéz, csak egyszer neki kell vágnunk.

Kiindulásunk az admin modul, melynek forrása a következő:

/*01*/ function admin_help($section) {
/*02*/ switch ($section) {
/*03*/ case 'admin/modules#description':
/*04*/ return t('Handles the administration pages.');
/*05*/ case 'admin':
/*06*/ return t('Welcome to the administration section. Below are the most recent system events.');
/*07*/ }
/*08*/ }
/*09*/ function admin_menu($may_cache) {
/*10*/ $items = array();
/*11*/ if ($may_cache) {
/*12*/ $items[] = array(
/*13*/ 'path' => 'admin',
/*14*/ 'title' => t('administer'),
/*15*/ 'access' => user_access('access administration pages'),
/*16*/ 'callback' => 'admin_main_page',
/*17*/ 'weight' => 9);
/*18*/ }
/*19*/ return $items;
/*20*/ }
/*21*/ function admin_main_page() {
/*22*/ watchdog_overview('actions');
/*23*/ }
?>

Mivel ez a modul is csak egy oldalt definiál, emellett meglehetősen rövid, ezért ezt fogjuk végignézni sorrol-sorra, hogy lássuk, hogy épül fel egy ilyen modul. Saját modulunk építését bátran kezdhetjük úgy, hogy lemásoljuk az admin.module fájt cimlap.module néven, és kezdetnek lecseréljük az admin_ karaktersorozatokat cimlap_ -ra. Lássuk miből áll az admin modul, és ebből nekünk mire van szükségünk.

Az első függvény a 1-8. sorokban az admin_help, ez a hook_help kampó megvalósítása. Mit jelent egyáltalán az, hogy hook_help? Egyszerűen annyit, hogy az admin.module modul help (súgó) függvényét admin_help néven hívja a rendszer. Szabadon dönthetünk arról, hogy a számos kampó közül melyiket valósítjuk meg, és melyiket nem.

Mint látjuk, a hook_help hívásakor egy paramétert kapunk, a $section értéket. Ennek tartalma egy Drupal útvonal, majd egy esetleges kettőskereszt és egy leíró. Legfontosabb az admin/modules/#description értéket kezelnünk, hiszen ez a modulok listájában megjelenő szöveg. Adjuk meg saját modulunkhoz ezt a harmadik sorban a 'Handles the administration pages.' helyére. Ha nem írunk be semmit, vagy akár az egész _help kampót kihagyjuk, akkor sincs probléma, modulunk egyszerűen nem fog súgókat nyújtani. Ettől ugyan még használható lesz, de nem érdemes ezen a pár szón spórolni.

Bár az admin modul az 5-7. sorokban az admin útvonal meghívásakor is megjelenít egy segítő szöveget, amit a táblázat felett láthatunk, nekünk ilyenre nem lesz szükségünk, ezeket a sorokat törölhetjük.

A 9-20. sorokban az admin_menu függvény következik, mely a hook_menu megvalósítása. Vigyázat, a név kissé becsapós: ennek a segítségével nem csak a navigációs blokkban látható menübe szúrhatunk be menüpontokat. Ugyanitt tudunk füleket definiálni, sőt a menüben meg nem jelenő elérési utakhoz is itt tudunk hozzárendelni kezelőfüggvényeket. Paramétere a $may_cache. Ez igen friss a Drupalban, a http://drupal.org/node/8179 tanúsága szerint 2004. szeptember 13-án vezették be, és a legjobb dokumentáció hozzá – legalábbis szerintem – jelenleg ezen az oldalon található megjegyzés: ha a menüpontunk nem függ az útvonaltól, akkor bátran betehetjük az if ($may_cache) {...} blokkba. Ha azonban függ az oldaltól, mint például a tartalom szerkesztése fül, akkor ennek az else ágába tegyük.

Egy kétdimenziós tömbbel kell visszatérnünk, ezt építi fel a modul a következő három sorban. Ha használtuk már az adminisztrációs felületet, akkor csupa ismerős dologgal találkozhatunk. Láthatjuk a 13. sorban, hogy ez a modul az admin Drupal útvonalban érdekelt. A saját modulunkban ennek értéke legyen cimlap. A menüben egy administer feliratú bejegyzés jön létre a 14. sor hatására, nekünk itt a címlap felel meg. Az adminisztrációs az oldalt csak az access administration pages elérési jog birtokában nézhetjük meg (15. sor), nekünk jobban megfelel a szintén beépített access content jog használata. A callback adja meg a 16. sorban, hogy mely függvényt hívja majd meg a Drupal az oldal előállításához. Legyen ez cimlap_page, a Drupal hagyományoknak megfelelően. A 17. sorban a weight szokásos módon a bejegyzés súlyát mondja meg, mely szerint a menüben sorrendezhető. Ha ezt nem adjuk meg, akkor ábécé rendben kerülnek sorba a menüpontok.

A cimlap_page függvényben állítsunk össze egy $output karakterláncot, ami az oldal tartalma és függvényünk utolsó utasításaként írassuk ezt ki egy print theme('page', $output); hívással. Ennek hatására megjelenik az előállított HTML kód az aktuális sminkben. Mostanra a következő kódhoz jutottunk:

function cimlap_help($section) {
switch ($section) {
case 'admin/modules#description':
return 'A címlap tartalmát állítja elő';
}
}
function cimlap_menu($may_cache) {
$items = array();
if ($may_cache) {
$items[] = array(
'path' => 'cimlap',
'title' => 'címlap',
'access' => user_access('access content'),
'callback' => 'cimlap_page',
'weight' => 0);
}
return $items;
}
function cimlap_page() {
$output = 'Ez a címlap tartalma';
print theme('page', $output);
}
?>

Próbáljuk ki a http://drupal.site/cimlap oldalunkat. Ha ez jó, akkor állítsuk át az admin/settings alatt a címlapra behívott elérést node-ról cimlap értékre. Egy igazán élvezhető főoldlahoz persze tartalom is dukál, de ezt már PHP tudásunk birtokában könnyen el tudjuk készíteni. Tippekhez érdemes megnézni a node_page kódját, mely az alapértelmezett főoldalt generálja.

A főoldal egyediségéhez tartozhat még, hogy bizonyos blokkok csak ott jelennek meg, vagy éppen csak ott nem jelennek meg. Ezt az admin/block oldal Elérési út oszlopában szabályozhatjuk, mintaillesztő kifejezések segítségével. Ha például azt szeretnénk, hogy egy blokk csak a főoldalon jelenjen meg, akkor annak az elérési útja legyen |^$|. Ha viszont szeretnénk meggátolni, hogy egy blokk megjelenjen a főoldalon, akkor ugyanide pl. a |^.| ajánlható.