A következőkben egy olyan, általam írt PHP-s függvényt szeretnék bemutatni, amellyel könnyedén és egyszerűen készíthetünk magunknak olyan oldalt, amely támogatja a sablonok (template) kezelését. Ez több szempontból is hasznos lehet:
- több dizájnunk van a honlapon, és akkor váltunk amikor szeretnék
- a felhasználók válthatnak akár másik dizájnra
- a design és maga a kód elkülönül egymástól, átláthatóbb és kezelhetőbb az egész
Vágjunk is bele! Először is szükségünk lesz egy .tpl fájlra. (a kiterjesztése végülis teljesen mindegy, létrehozás: megnyitod a jegyzettömböt, majd elmented pl. template.tpl néven).
A függvényünknek a load_template_file nevet adtam (lehet kicsit hosszú :)):
1 2 3 4 5 6 7 | <?php function load_template_file() { } ?> |
A függvény alkalmazása során szükségünk lesz két változóra. Az egyik a betölteni kívánt template fájl lesz, a másik pedig egy tömb, amely a template fájlban lecserélendő értékeket fogja tartalmazni.
1 2 3 4 5 6 7 | <?php function load_template_file($fajlnev,$tomb) { } ?> |
A következő lépés a template fájlunk beolvasása, azonban először ehhez meg is kell nyitnunk:
1 | $temp = fopen($fajlnev,"r"); |
A következő lépésben beolvassuk a $tartalom változóba a megnyitott fájlunk tartalmát, majd lezárjuk a fájlt:
$tartalom = fread($temp, filesize($fajlnev));
Ezek alapján a függvényünk a következő:
1 2 3 4 5 6 7 8 9 | <?php function load_template_file($fajlnev,$tomb) { $temp = fopen($fajlnev,"r"); $tartalom = fread($temp, filesize($fajlnev)); fclose($temp); } ?> |
Nos a template.tpl fájlunkba a következőt írjuk bele:
1 | {koszones} Methos! |
Ezután a preg_replace() nevű php függvényt fogjuk alkalmazni, mellyel lecséljük a tömbünkre a {kulcs} típusú szöveget.
1 | $tartalom = preg_replace("/{(.*?)}/si","\" . (\$tomb['\\1']) . \"",$tartalom); |
Ezzel sikeresen lecseréltük a bevezetett saját kis jelölési rendszerünket. Azonban ha ilyen formában íratjuk ki a tartalmat, akkor hibás eredményt fogunk kapni, nem a kívánt végeredményt.
Ezért szükségünk van a ismét egy PHP függvényre, mégpedig az eval()-ra. Ez a függvény annyit tesz a $tartalom változónkkal, hogy a tartalmát PHP-kódként értelmezi, így a benne lévő változókat is.
1 | eval("\$tartalom = \"" . addsleshes($tartalom) . "\";"); |
Ezután nincs más dolgunk, mint a return $tartalom;-al a függvénynek átadni a $tartalom változó értékét.
Ezek alapján a teljes függvény (kiegészítve egy védelemmel: ha a template fájl nem létezik, nem próbálja meg megnyitni):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function load_template_file($fajlnev,$tomb) { if(file_exists($fajlnev) > 0) { $temp = fopen($fajlnev,"r"); $tartalom = fread($temp, filesize($fajlnev)); fclose($temp); $tartalom = preg_replace("/{(.*?)}/si","{\$tomb[\\1]}",$tartalom); eval("\$tartalom = \"" . addslashes($tartalom) . "\";"); return $tartalom; } } |
A függvény pontos használata pedig a következő:
Adott ugye egy template.tpl fájlunk a következő tartalommal:
1 2 | {koszones1} Methos! {koszones2} Tutorial.hu! |
A függvényt mentsük el egy template.php fájlba. Hozzunk létre egy például egy index.php-t a következő tartalommal:
1 2 3 4 5 6 7 8 9 10 | <?php include("template.php"); // Függvény include-olása $array = array('koszones1' => 'Szia', 'koszones2' => 'Hello'); echo load_template_file("template.tpl",$array); ?> |
(Figyelem! A kulcs-ok kis és nagybetűérzékenyek!)
Ha lefuttatjuk az index.php-t, akkor a a következő kimentet kapjuk:
Szia Methos!
Hello Tutorial.hu!
Remélem a függvény használata a fenti példából egyszerűen kiderül.
És hogyan is építsünk fel így egy oldalt?
Adott egy index.tpl fájlunk például, amiben fel van építve az oldal, és a kívánt helyen (ahová pl. a híreket szeretnénk) be van szúrva a következő:
{TARTALOM}
Ezen kívül van egy másik tpl fájlunk amelyekben a hírek vannak. Íme akkor a módosult index.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php include("template.php"); // Függvény include-olása $array_hirek = array('CIM' => $hircim, 'SZOVEG' => $szoveg) $hirek = load_template_file("hirek.tpl",$array_hirek); $array = array('TARTALOM' => $hirek); echo load_template_file("index.tpl",$array); ?> |
Remélem ebből már mindenki tudja folytatni. Jah és persze a .tpl fájlok egyszerű HTML-ek, tehát bármilyen HTML kód alkalmazható benne. Ha kérdés van megtaláltok a fórumon.
Kedves Methos!
Milyen lesz a kód, ha adatbázisból szedem az adatokat és nem tudom előre, hány köszönés lesz?
Sziasztok. Nem tudom,hogy még aktuális-e a dolog,de a template kezeléssel kapcsolatban lenne kérdésem…
Az nem érdekes, hogy hány köszönés van. Azért számozta be őket, mert különböznek. Ha ugyanaz, akkor természetesen a templateben is ugyanaz fogja jelölni őket. Ez csak lecseréli.
Pl.:
{koszon1} Sanyi
{koszon1} Lali
Szia Sanyi
Szia Lali
Szia, nem tudom aktuális-e még, de ezt a hibát kaptam.:
Notice: Use of undefined constant koszones1 – assumed ‘koszones1’ in C:\xampp\htdocs\tesztek\tpl\template.php(11) : eval()’d code on line 1
Notice: Use of undefined constant koszones2 – assumed ‘koszones2’ in C:\xampp\htdocs\tesztek\tpl\template.php(11) : eval()’d code on line 2
Szia Methos! Hello Tutorial.hu!
Sziasztok! Nekem az a probléma, hogy többszörös idézőjel, aposztróf használattal meghal a kód.
pl: onClick=”minusOne(‘{barcode}’,'{dbszam}’);” után azt kapom, hogy nincs vége a kódnak (javascript) és így néz ki a forráskódban: onClick=”minusOne(„995… ‘,’2’);”=””
Help please!