A Joomla CMS rendszer sok szempontból nagyon rugalmas rendszer. Persze olyanok is vannak, amiben nem, de a 2.5-ös Joomlával szépen haladunk a jó úton.
Az egyik legszebb dolog, hogy ha egy komponens kinézetét, layoutját meg akarjuk változtatni, akkor erre elegáns lehetőségünk van. Itt nem csak egy sima CSS alakításra gondolok, hanem keményen HTML-PHP vonalon mozgunk, ebbe nem is megyek bele, csak a strukturális alapokat szeretném bemutatni.
Az egésznek az alapja a megfelelő tervezési struktúra, ami az MVC (model-view-controller) nevet viseli. Végletekig leegyszerűsítve azt mondhatjuk, hogy egy komponens ezen három féle részegységre bomlik. A model(ek) végzi(k) az adatbázissal történő kommunikációt, az adatkezelést, ellenőrzést stb. A view a megjelenítésre szolgál, míg a controller a folyamatirányításért felelős, hogy mikor mi történjen. Vannak még egyebek (adattábla classok, helperek, assetsek, nyelvi fájlok, stb), de most ez a lényeg. A view-n belül több layout lehetséges, ezek az elrendezési formák. Ezeket láthatjuk a listában, amikor menüpontot hozol létre. A Joomla lehetőséget ad arra, hogy ezeket a layoutokat a sablonunkban felülbíráljuk anélkül, hogy belenyúlkálnánk a komponensbe, elrontanánk, vagy megszüntetnénk a frissíthetőségét.
Vegyük példának a Joomla cikk-megjelenítőjét. Egy cikkre mutató linkünk mondjuk kb így nézhet ki:
domain/index.php?option=com_content&view=article&id=29&Itemid=30
Az URL-t megvizsgálva több részre bonthatjuk az & karakter mentén:
- option=com_content -> ez mondja meg, hogy melyik komponensről van szó, jelen pillanatban a com_content, ami a Joomla beépített cikk-kezelője.
- view=article -> ő mondja meg, hogy melyik nézetet használjuk. Ugye a cikknél van az egy cikk, a blog, a lista nézet, stb. Most a cikk-nézettel dolgozunk.
- id=29 -> ő mondja meg, hogy melyik elemet (jelen esetben cikket) kell megjelenítenünk.
- Itemid=33 -> opcionális, a menüpont azonosítója, jelen esetben nincs is rá szükség.
Ha belenézünk egy komponens fájl szerkezetébe, akkor a fenti logika szerint alapesetben a következő könyvtárakat mindenképpen látni fogjuk:
components/com_content (illetve a megfelelő komponens azonosítója, ami az URL option része után van)
components/com_content/views/ - ez tartalmazza a nézeteket
components/com_content/models/ - ez tartalmazza a modeleket
A views-be kukkantva megtalálhatjuk a megfelelő nézeteket, a cikk-kezelőben itt lesz az "article" könyvtár. Itt van egy pár fájl, amire most nincs szükségünk, illetve egy tmpl könyvtár. Nos, ő az, ami tartalmazza a nekünk szükséges megjelenítési layout-okat. Ha nem tér el a fejlesztő a sablonoktól, akkor az alap megjelenítő a "default.php" nevet viseli, míg a felviteli űrlap a "form.php" nevet. Ezt lehet még tovább szabni, de ennyi az alap.
Mivel nekünk a cikk megjelenítő kell, kövessük a következő lépéseket:
- csináljunk biztonsági mentést
- keressük meg a joomla telepítésünk gyökerében a templates könyvtárat, azon belül a saját sablonunkat
- nézzük meg, hogy szerepel-e benne egy 'html' nevű könyvtár. Ha nem, akkor hozzuk létre!
- nézzük meg, hogy ezen belül szerepel-e egy 'com_content' (vagy amilyen komponens kell) könyvtár. Ha nem, hozzuk létre!
- Ezután egy szinttel lejjebb a nézet nevének megfelelő könyvtárra van szükség, jelen esetben ez az 'article'.
- Tehát van egy templates/sablonneve/html/com_content/article könyvtárunk. Ide másoljuk be az eredeti default.php-t és a szükséges változtatásokat ezen végezzük el.
Mi fog történni?
Amikor a Joomla érzékeli az URL-ből (esetleg egyéb paraméterekből), hogy a 'com_content' komponens 'article' view-járól van szó, először a sablon megfelelő helyén keresi a megfelelő layoutot. Ha megtalálja, azt használja, így sikeres volt a felülírásunk. Ha nincs ilyen elérési út/fájl, akkor fordul az eredeti komponenshez. Így biztonságosan bíráltuk felül a megjelenítést.
További apróságok:
- Moduloknál nincs view, ott a templates/sablonneve/mod_modulneve/layoutfájl.php elérés használható
- Ezzel a módszerrel megoldható új layout hozzáadása a rendszerhez, csak akkor szükség van a hozzá tartozó XML fájl létrehozására is, illetve figyelni kell, hogy ha a layout leszármazott sub-layoutokat hív meg (pl list->item), akkor azt már a sablon könyvtárában fogja keresni.
- Lehetőség van globálisabb felülbírálásra is, pl a modulok, komponensek, lapozó általános megjelenítési alakítására. Ekkor a html könyvtáron belül modules.php, pagination.php stb fájlokkal kell dolgoznunk. A gyári sablonokban láthatunk rá példát.
Természetesen a testreszabáshoz legalább hellyel-közzel értenünk kell, hogy mi van a felülbírálandó kódban, de ez már nem ennek a cikknek a témája.
Sok sikert!
Utolsó kommentek