A Weblaboron történt eszmecsere után merült fel bennem, hogy végre valahára fel kéne frissítenem egy rég elveszett cikkemet. Kérdés amire megpróbálom megtalálni a választ, hogy miért is használjunk template-t vagy sablont. Mindjárt az elején szeretnék megcáfolni egy régi téveszmét, mely szerint ha sablont akarunk használni akkor Smarty-t kell használnunk. A Smarty pusztán egy sablonmotor a sok közül, bizonyos szempontokból az egyik legjobb, de nem az egyetlen. A sablonmotor, legyen bármelyik is az csupán csak egy eszköz. Pusztán attól, hogy sablonmotort használunk nem lesz jobb és szebb a kódunk és az életünk.

Miért használjunk sablont?

Egy sablonmotor lehetővé teszi számunkra, hogy a „program kódot és a HTML kódot szétszaggasuk”. Két dolgot kell tehát szétválasztanunk az egyik a „mikor/kinek mi jelenjen meg” a másik pedig a „hol és hogyan jelenjen meg”. Talán e két kérdéssel sikerül közelebb kerülnünk a hoz, hogy könnyedén el tudjuk dönteni mi tartozik a működési(programkód) és mi a megjelenítési(sablonkód) logikához. Nézzünk egy példát. Az, hogy egy hírnél megjelenik-e a szerkesztés link nem a sablon feladata, hanem a működési logikáé. A programunk kódjába kell elhelyeznünk azokat a vizsgálatokat amik eldöntik, hogy kinek és mikor jelenjen meg a link. Például adminisztrátornak mindig, sima felhasználónak csak akkor, ha ő hozta létre a cikket, névtelen felhasználónak meg soha. Ugyan ez egy fórum témánál kibővül azzal, hogy ha van hozzászólás akkor már ne lehessen módosítani az eredeti témát. Egy wiki-nél pedig mindig mindenkinek meg kell jeleníteni a linket. A sablonban pedig azt kell megoldanunk, hogy ha van egy „szerkesztés” linkünk akkor az hol jelenjen meg a hír alatt, felett, a cím mellett vagy mindenütt. Hogyan nézzen ki, lecseréljük-e egy kis ikonra vagy sem stb.

Csak ennyit megtéve elmondhatjuk, hogy lehetővé vált a szájtunk átbőrözése. Könnyedén el tudjuk adni az általunk kifejlesztett tartalomkezelő rendszert újra és újra, csak a megjelenését kell átszabnunk.

Hogyan válasszunk sablont?

Természetesen, ha csak egy személy dolgozik egy projekten, akkor szinte mindegy, hogy milyen eszközt használ a szétválasztásra. Nyílván azt fogja használni ami neki a legjobban megfelel. Azonban egy fejlesztői gárdánál már egyéb igények is felmerülnek. Az egyik legtipikusabb, hogy a grafikus/html kóder nem szeretne belenyúlni a kódba, hisz nem ért hozzá. Pontosan ezért örülne ennek a programozó is. Tehát kellene valami olyan eszköz amivel ez megoldható.

Ebben a rövid írásban egy eszközt szeretnék bemutatni.

Az eszköz neve csiri-biri sablonmotor. Ez egy egyszerű egy soros PHP program, ami képes a minimális szétválasztást megoldani. Mint később látni fogjuk, sajnos ez az eszköz nem minden esetben lesz használható, és nem old meg minden problémát. Természetesen bizonyos speciális esetekben ez a megoldás is nagyszerűen használható lesz.

a „sminkmotor”

<?php function tpl($smink,$vars){ return strtr(join(’’,file($smink)),$vars); } ?>

Használata

a smink (sminkek/smink.tpl)

#TITLE

#CONTENT

a program

<?php $vars=array(); $vars[’#TITLE’]=‘Próba’; $vars[’#CONTENT’]=‘Hello Világ!’; echo tpl(‘sminkek/smink.tpl’, $vars); ?>

Hurrá! - mondhatnánk. Azonban gondoljunk bele hogyan tudjuk ezzel a megoldással azt az egyszerű esetet megoldani, hogy az aktív link más színű legyen. Az, hogy egy link aktív az ugye a programkódba van benne. Ez eddig rendben is van, de hogyan tudjuk a sminknek ezt átadni? Egyetlen egy módon, ha átadjuk a html elemet(pl. egy class-t) ami jelzi, hogy ez az elem bizony az aktív.

a program

<?php $vars=array(); $vars[’#URL’]=‘http://palocz.hu’; $vars[’#CLASS’]=‘aktiv’; $vars[’#SZOVEG’]=‘Főoldal’; echo tpl(‘sminkek/link.tpl’, $vars); ?>

Láthatólag megoldottuk a problémát valójában nem. Gondoljunk bele mi van akkor, ha egy másik osztályt akar a grafikus használni arra, hogy jelezze az aktív linket? Ekkor a kódba kell nyúlni, hisz az osztály neve a kódban van bedrótozva. Nem beszélve arról az esetről, ha valamilyen más módszerrel szeretné ezt megoldani. Természetesen, ha ilyen bonyolultságú feladatokat nem kell megoldanunk, akkor ez a módszer nagyszerűen használható.