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ó.