1. Bevezetés
A statikus tartalmú weblapok kora leáldozott. Ezen lapok szerkesztése (viszonylag) bonyolult,
a tartalmuk nehezen karbantartható és működésüknél fogva nem biztosíthatnak semmiféle
megoldást a többirányú kommunikációra és egyéb fejlett szolgáltatásra sem.
Ezzel szemben a dinamikus weblapok szinte bármire képesek, amit csak el tudunk képzelni
(persze csak bizonyos határokon belül). Például előállíthatók mindenféle kép és videógalériák
anélkül, hogy egyesével szúrnánk be az egyes elemeket a lap kódjába, elérhetővé válik, hogy
bármilyen elemhez/eseményhez hozzászólásokat rögzítsünk/jelenítsünk meg, stb.
Ezzel, hogy az egyszerű felhasználók is részt vehetnek egy oldal tartalmának kialakításában,
maximálisnak nevezhető a felhasználói interakció.
Természetesen, mint minden másnak ennek is megvannak az árnyoldalai. A dinamikus oldalak készítése
több programozási/leíró nyelv ismeretét követeli meg. A legalapvetőbbek ezek közül a kliens oldalon a
HTML (HyperText Markup Language) és CSS (Cascade Style Sheets) leíró nyelvek, és a javascript programnyelv.
A szerver oldalon a PHP (Public Hypertext Preprocessor) és az adatbáziskapcsolathoz SQL (Simple Query Language)
nyelv ismerete szinte elengedhetetlen. A PHP ugyan helyettesíthető más nyelvekkel is,
de ez a legkönnyebben elérhető, és így a legelterjedtebb is. A PHP szinte minden operációs rendszerrel
és webszerverrel képes együttműködni.
A használt nyelv persze támogatott kell, hogy legyen a szerveren.
Vissza az oldal tetejére
1.1. A CMS-ekről általában
A CMS (Content Management System), azaz tartalomkezelő rendszer célja, hogy dinamikus tartalmú weboldalakat üzemeltessen.
Mindezt úgy, hogy az oldal webmesterének minél egyszerűbb dolga legyen az oldal felépítése/karbantartása/bővítése közben.
Szóval a CMS elsődleges feladata a webmester(ek) munkájának támogatása
Ez a támogatás nagyjából a következőkből áll:
- az oldal programozás nélküli építése/bővítése/módosítása
- felhasználók által küldött adatok kezelése
- egyéb karbantartási funkciók
Sok előnnyel járhat még egy CMS alkalmazása, mint például a megspórolt programozási idő, csoportmunka támogatása, stb.
Általában a CMS feladata az oldalak generálása is, ez az a folyamat, ahol létrejön az oldal megadott beállítások alapján.
A webmotor, portálmotor szavak a CMS nemhivatalos szinonímái.
Vissza az oldal tetejére
1.2. A Matrix
A Matrix Portal Engine egy nagyon egyszerű, egyedi elgondolású, moduláris CMS.
Nagyjából tudja, amit egy CMS-nek feltétlenül tudnia kell,
de még a fejlesztés korai fázisában van, így sok hiányossága és hibája van.
A fejlesztés 2009 elején kezdődött, azzal a céllal,
hogy létrejöjjön egy igazán széles körben alkalmazható webes alkalmazáscsomag (CMS).
Az elnevezése a működéséből fakad (működés).
Vissza az oldal tetejére
1.3. Működés
A működés sarkalatos pontja mind a fejlesztésnek, mind a CMS alkalmazásának.
A rendszer alapjaiban különbözik a jól ismert CMS-ektől.
Az egész rendszer azon az elképzelésen alapul, hogy minden egyes weblap elhelyezhető
egy táblázatban úgy, hogy megőrizze eredeti küllemét és az egyes cellák logikailag elkülönülő részeket tartalmazzanak.
Így a Matrix CMS által generált lapok táblázatos szerkezetűek.
A rendszer entitásai:
- oldal
- modul
- példány
- tábla
Ezen entitások segítségével állítható össze a rendszerben a portál, illetve ezek alapján generálódnak a kért aloldalak.
Részletesebben:
Az oldal írja le egy aloldalt leíró táblázat (mátrix) konfigurációját
(cím, sorok és oszlopok száma, cellák tartalma, stb).
A modul egy konfigurálható programkód.
A példány egy modulból létrehozott, egyedileg konfigurált modulpéldány.
A tábla egy adatbázis táblát takar, nem a rendszer saját entitása. Az egyes táblákat az egyes modulok specifikálják.
Az oldalgenerálás folyamata:
- A rendszer beolvassa és feldolgozza a globális konfigurációs fájlt. Ez tartalmazza az oldal karakterkódolását, a rendszer nyelvét, az alkalmazott stílust, alapértelmezett aloldalakat, stb.
- Beolvassa és feldolgozza a kért, vagy a globális konfigurációban megadott alapértelmezett aloldal konfigurációs fájlját.
- Lefuttatja az aloldalon található példányok inicializáló kódját, a megadott priorításoknak megfelelő sorrendben. Ilyenkor határozódik meg a jogosultsági szint, ha van például login modul, amelyet érdemes a legmagasabb (vagyis legkisebb = 0) priorítással futtatni.
- Ha a kért aloldal jogosultsági szintje magasabb az elértnél, akkor a rendszer újratöltődik egy alapértelmezett aloldallal.
- Táblázat rajzolása. Ilyenkor kerülnek futtatásra a tartalmazott példányok fő programkódjai.
- Globális (kliens oldali) scriptek futtatása. Ez a funkció az egyes modulok window.onload ütközéseit próbálja kivédeni, ráadásul saját scripteket is futtathatunk vele.
A rendszer mappái:
- admin - az adminisztrációs felület fájljai
- images - az admin felület képei
- languages - az admin felület nyelvi fájljai
- themes - az admin felület témái
- bin - futtatható fájlok
- cfg - globális konfigurációs fájlok
- docs - dokumentáció
- files - fájlok
- instances - példányok konfugurációs fájljai
- languages - nyelvi fájlok
- modules - modulok programkódjai
- pages - aloldalak konfigurációs fájljai
- scripts - globális scriptek
- themes - témák, stílusok
- user - felhasználók fájljai
Vissza az oldal tetejére
1.4. Tulajdonságok
- Az egyes aloldalak elrendezése egymástól független, és testreszabható. Ezáltal valóban egyedi oldalak készíthetők.
- Moduláris felépítés. Ennek köszönhetően nagyon széles körben alkalmazható a rendszer.
- A modulok programkódjai paraméterezhetők.
- A modulpéldányok egymástól függetlenek. Így egy modul akár több példánya is lehet egy aloldalon, és ugyanaz a példány jelen lehet bármelyiken.
- A modulpéldányok használhatnak megosztva, de kizárólagosan is erőforrásokat.
- ?
- ?
- ?
Vissza az oldal tetejére
2. Telepítés
- Másoljuk/töltsük fel ftp-n a fájlokat és könyvtárakat a webszerver megfelelő mappájába.
- Engedélyezzük az írást a cfg, instances, pages, user, esetleg a files mappára.
- Nyissuk meg a rendszer adminisztrációs felületét egy böngészőben, így: http://szerver_és_elérési_út/admin
Vissza az oldal tetejére
2.1. Első indítás
Amíg nincs konfigurálva a rendszer, addig használhatatlan. Az admin felület első indításával megadhatjuk a működés lefőbb paramétereit.
Első lépésben az adatbáziskapcsolathoz szükséges paramétereket, majd a belépési adatokat kell megadnunk.
Ezek után bent is vagyunk a rendszer adminisztrációs felületén, el is kezdhetjük építeni az oldalt.
Vissza az oldal tetejére
2.2. Rendszerkövetelmények
Szerver oldalon:
- webszerver (apache, lighttpd, iis)
- php 5+ (lehet, hogy működik php 4-gyel is)
- mysql 4+
Kliens oldalon csak egy javascript-képes böngészőre van szükség (Firefox 3+ ajánlott).
Írva és tesztelve a következőn volt/van: Apache 2.2.11, PHP 5.2.9-2, MySQL 5.1.33. Ezen tökéletesen működik.
Vissza az oldal tetejére
3. Működtetés
A böngésző címsorába írjuk be szerverünk címét és a rendszerhez vezető elérési utat, ha nem a gyökérben van elhelyezve.
Ezzel a rendszer frontend felületére jutunk, vagyis az oldalgenerátorhoz, ahol megnézhetjük mit alkottunk.
Az adminisztrációs felületre jutáshoz egészítsük ki az előbbi címet egy /admin, vagy /admin.php szöveggel.
Ha nem akarjuk, hogy bárki elérhesse ezt a (backend) felületet, nevezzük át az admin.php-t, de a kiterjesztés maradjon php!
Vissza az oldal tetejére
3.1. Adminisztrációs felület
Az adminisztrációs felületen eszközölhetünk bármilyen, az oldal szerkezetét, tartalmát érintő módosítást.
A menü a következő részekre tagolja a felületet:
Áttekintés: Itt egy kevés információt találunk a rendszerről.
Beállítások: Itt adhatjuk meg portálunk globális és az adminisztrációs felület paramétereit.
Adminisztrációs felület beállításai:
adminTheme = admin felület témája, stílusa.
sessionTimeout = munkamenetazonosító érvényességi ideje másodpercben.
filesRoot = fájlok gyökérmappája a 'fájlok' részben.
tableRecordsPerPage = megjelenített elemek száma oldalanként a 'táblák' részben.
Portál globális beállításai:
title = az oldal címe.
theme = stílus, téma.
language = a rendszer által használt nyelv.
charsetEncoding = karakterkódolás.
defaultPage = alapértelmezett aloldal.
authorizationErrorPage = jogosulatlan kérés esetén megjelenítendő aloldal.
autoRowspan = függöleges cellák spanolása, kikapcsolása csak hibakeresésre ajánlott.
drawTitle = cím kiírása az ablak fejlécére.
dateFormat = dátum formátuma a php date() függvényéhez.
Globális scriptek: itt láthatók, ki- és bekapcsolhatók az elérhető scriptek
Oldalak: Itt az aloldalakat manipulálhatjuk, másolhatjuk, szerkeszthetjük, törölhetjük, stb.
Az első oldalon a meglévő aloldalakat és azok néhány paraméterét láthatjuk.
A nevek előtt lévő szerkesztés gomra kattintva elérhetővé válnak a fájlműveletek (átnevezés, másolás, törlés).
Az utolsó sor (új oldal létrehozása) szerkesztés gombjára kattintva új oldalt hozhatunk létre.
A nevekre kattintva megjelenik az oldalszerkesztő.
Az oldalszerkesztőben megadhatjuk oldalunk alapvető paramétereit
(cím, leírás, sorok és oszlopok száma, jogosultsági szint, az egyes oszlopok szélessége, sorok magassága),
valamint példányokat rendelhetünk az aloldalt reprezentáló táblázat celláihoz.
A példányok hozzárendelése úgy történik, hogy először válasszunk egy színt és egy példányt, majd kattintsunk egy cellacsoport bal felső cellájára, és utána a jobb alsóra.
Cella/cellacsoport kijelöléséhez kattintsunk duplán a kívánt elemen.
Aktív kijelölés esetén másik példányt rendelhetünk a kijelölt területhez, vagy törölhetjük a hozzá tartozó adatokat.
Egy cella csak egy példánynak adhat helyet.
Beállításainkat a beállítások mentése gombbal véglegesíthetjük.
Példányok: Itt a példányokkat manipulálhatjuk, másolhatjuk, szerkeszthetjük, törölhetjük, stb.
Az első oldalon a meglévő példányokat és azok néhány paraméterét láthatjuk.
A nevek előtt lévő szerkesztés gomra kattintva elérhetővé válnak a fájlműveletek (átnevezés, másolás, törlés).
Az utolsó sor (új példány létrehozása) szerkesztés gombjára kattintva új példányt hozhatunk létre.
A nevekre kattintva megjelenik a példányszerkesztő.
Itt láthatjuk a felhasználó aloldalakat, az alkalmazott táblákat, valamint konfigurálhatjuk példányunkat.
Az alapvető paraméterek minden modul esetén megegyeznek:
module = a modul, amelyből a példány készült.
windowed = be legyen keretezve?
uniqueStyle = egyedi stílus használata a kerethez, alkalmazásához a stíluslapon jelen kell lennie minden moduletable bejegyzésnek a példány nevével prefixumként.
title = cím, ha keretezve van, akkor ez kerül a fejlécre.
icon = ikon képfájl, ha keretezve van, akkor ez kerül a fejlécre.
priority = a modul initkódának futtatási sorszáma (a 0 fut először).
containerStyle = a cella stílusának megadása CSS-ben.
isVisible = azt adja meg, hogy a modul fő programkódja lefusson-e.
Modul specifikus paraméterek: modulonként változó paraméterek megadása. Részletekért tekintsük meg az adott modul dokumentációját.
Beállításainkat a beállítások mentése gombbal véglegesíthetjük.
Táblák: Itt a táblákat manipulálhatjuk, másolhatjuk, szerkeszthetjük, törölhetjük, stb.
Az első oldalon a meglévő táblákat és azok specifikációit láthatjuk, valamint SQL parancsokat küldhetünk az adatbázis szervernek.
A nevek előtt lévő szerkesztés gomra kattintva elérhetővé válnak a minden rekordot érintő műveletek (átnevezés, másolás, törlés, üres tábla létrehozása).
Új tábla létrehozására itt nincs lehetőség, azok a példányok konfigurálásakor jönnek létre.
A nevekre kattintva megjelenik a táblaszerkesztő.
A táblaszerkesztőben láthatók a kompatibilis modulok és a felhasználó példányok, valamint
szerkeszthető a tábla szerkezete, és tartalma is. A szerkesztési funkciók a szerkesztés gombokkal válnak láthatóvá.
A törlés gomb törli a rekordot/mezőt, a beszúrás gombbal új rekordot/mezőt hozunk létre, a frissítés gombbal módosítunk.
A szerkezet szerkesztése csak haladóknak ajánlott.
Fájlok: Itt a fájlokat manipulálhatjuk, másolhatjuk, szerkeszthetjük, törölhetjük, stb.
Ez egy kétoldalas, XX commander szerű fájlkezelő alkalmazás.
Az egyparaméteres műveletek (attribútumok, átnevezés, új könyvtár, feltöltés, törlés)
mindig az aktív oldalra értendők, amelyet az oldalak feletti rádiógomb jelez.
A kétparaméteres műveletek (áthelyezés, másolás) az atívról a passzív oldal felé történnek.
Mappák nevére kattintva a mappába kerülünk, fájlok nevére kattintva a fájl megnyitásra kerül egy új ablakban (lapon).
A minden kijelölése/minden kijelölés megszűntetése műveletek a jelölődobozokon való duplakattintással érhetők el, a művelet a doboz állapotától függ.
Vissza az oldal tetejére
3.2. Moduladminisztráció
A modulspecifikus adminisztrációs műveleteket a frontend felületről,
kiemelt felhasználói vagy adminisztrátori jogkör birtokában végezhetjük el.
Részleteket az adott modul dokumentációjában taláhatunk.
Vissza az oldal tetejére
4. Fejlesztés
Ha fejleszteni szeretnénk a rendszert, mindenképp ismernünk kell a működését.
Vissza az oldal tetejére
4.1. Témák készítése
Témák készítéséhez ismernünk kell a CSS (Cascade Style Sheets) leíró nyelvet, és egy képszerkesztő programot (Photoshop, Gimp).
Érdemes megvizsgálni egy már elkészült témát és az alapján összeállítani az újat.
Vissza az oldal tetejére
4.2. Modulfejlesztés
A modulok fejlesztése érdekes feladat. Ehhez először is ismernünk kell a modulok felépítését.
Minden modul tartalmazza a következő fájlokat:
- args.php - létrehozza az $args paramétereket, és a $tableSpecs táblaspecifikációkat tároló tömböt. Ezekre a tömbökre az admin felületnek van szüksége, ezek alapján állítja össze a példányok konfigurációs fájljait.
- default.php - alapértelmezett konfigurációs fájl, példányosításkor ez másolódik át a példányok mappájába a példány nevével.
- init.php - a modul inicializáló programkódja.
- main.php - a modul fő programkódja
Az $args értékei az adott paraméter típusától függően négy karakterből álló prefixummal rendelkeznek.
Az első három karakter definiálja a típust, a maradék egy csak elválasztó szerepet tölt be (_).
A típusok:
- bln (logikai)
- ord (szám, float és int is lehet)
- str (string, max 255 char)
- txt (hosszú szöveg)
- sty (stílus leírás)
- tbl (adatbázis tábla)
- sub (aloldal)
- mod (modul)
- ins (modulpéldány)
- sel (választható)
Példa: $args = array('bln_logikai', 'txt_szöveg', 'ord_szam', 'tbl_tabla', 'sel_opciok');
A tbl típushoz mindig léteznie kell egy $tableSpecs tömbnek, amely rendelkezik az adott tbl_tabla kulccsal,
és az ahoz tartozó érték egy páros elemszámú tömb, amely a tábla mezőneveit és típusait tárolja.
Példa: $tableSpecs['tbl_tabla'] = array('azonosito', 'int(5) unsigned', 'ertek', 'varchar(50)');
A sel típushoz léteznie kell egy $options tömbnek, amely rendelkezik az adott sel_opciok kulccsal,
és az ahoz tartozó érték egy tömb, amely a paraméterhez tartozó lehetséges értékeket tárolja.
Példa: $options['sel_opciok'] = array('ertek', 'masik_ertek', 'mindegy', 'stb');
A default.php egy példánykonfigurációs fájl, amely definiálja a $config tömböt az $args-ban megadott kulcsokkal és a hozzá tartozó étrékekkel. Ez létrehozható az adminisztrációs felületen.
Példa: $config = array('bln_logikai' => true, 'txt_szöveg' => 'blablabla');
A modulok programkódjaiban globálisan elérhetők bizonyos erőforrások (osztályok, változók, függvények).
Ezek a következők (írásuk nemkívánt következményekkel járhat):
- $authLevel - jogosultsági szint, értékei a következők lehetnek: 0 (vendég), 1 (felhasználó), 2 (kiemelt felhasználó), 3 (adminisztrátor).
- $user - felhasználónév.
- $params - ParamList objektum, az oldal GET paramétereit tárolja. Ha egy oldalon több GET paramétert fogadó modulpéldány van, akkor van nagy jelentősége. Részletekért nézzük meg a classes.php-t.
- $globalConfig - globális konfigurációt tároló tömb, részletekért nézzük meg a cfg/config.php-t.
- $db - Database objektum, minden adatbázis művelethez ezt használjuk. Részletekért nézzük meg a classes.php-t.
- $pid - aktuális aloldal azonosítója.
- $configs - az aloldalon található összes példány konfigurációját tároló tömb.
- $config - aktuális példány konfigurációja.
- $self - aktuális példány neve.
- $onloadScripts - window.onload-hoz kötött függvények neveit tároló tömb (példa a használatára: $onloadScripts[] = "myJSFunction").
- Elérhető a classes.php összes osztálya (Matrix API). Részletekért nézzük meg a classes.php-t.
- Elérhető a nyelvi fájlban definiált összes sztring, ezek mindegyike 'str_' prefixumú. Részletekért nézzünk meg egy nyelvi fájlt.
Figyelem! A modulok kódjával semmiféle bezárás nincs megvalósítva,
így olyan (változó, függvény, stb) neveket is használhatnak,
amelyek már használatban vannak, ezzel megzavarva a rendszer működését.
Ügyeljünk rá, hogy ne használjunk foglalt neveket!
Készüljünk fel arra a lehetőségre is, hogy kódunk többször le fog futni egy ciklusban.
Függvényeinket helyezzük a classes.php-ba, vagy egy másik fájlba és include_once-szal fűzzük be.
A már nem szükséges változókat mindig szabadítsuk fel az unset() függvény segítségével.
GET, POST, COOKIE, js változó- és függvényneveknél használjuk a '$self_' prefixumot.
Vissza az oldal tetejére
4.3. Foglalt nevek
Ezen nevek használatakor nem feltétlenül kapunk hibaüzenetet, de megzavarhatják a rendszer működését:
- inMatrix
- inMatrixTime
- rowPos
- colPos
- pageConfig
- spannedInstances
Ezeken kívül foglaltak a rendszer által biztosított környezet nevei (authLevel, user, params, globalConfig, stb),
a nyelvi sztringek (str_*) és a Matrix API által foglalt nevek (Database, Select, stb).
Vissza az oldal tetejére
4.4. Matrix API
A Matrix API (Application Programming Interface) néhány közösen használható objektumot szolgáltat a modulok programozásához.
Ezek a következők:
- Database - adatbáziskezelő osztály
- Select - SQL SELECT kérés összeállítását segítő osztály
- ParamList - szelektíven lekérdezhető GET paraméterlistát tároló osztály
- Login - bejelentkezéshez kapcsolódó függvényeket tároló osztály
- File - File osztály
- Dir - Mappa osztály, mappakezelő függvényekkel
- String - Sztringkezelő függvényeket tartalmazó osztály
- Arrays - Tömbkezelő függvényeket tartalmazó osztály
- Out - Kimenetet előállító függvényeket tartalmazó osztály
- RGB - Színkezelő osztály
Részletekért nézzük meg a classes.php-t.
Vissza az oldal tetejére
5. Modulok
Jelen pillanatban a következő modulok elérhetők:
- base - pszeudo-ősmodul, vagyis egy modulbetöltő modul
- example - csak egy példa
- login - bejelentkeztető modul
- menu - többszintű menü
- messageBoard - üzenőfal
- modUserData - felhasználói adatok módosítása
- pictureGallery - képgaléria
- registration - regisztráció
- static - statikus tartalmat megjelenítő modul
- videoGallery - videógaléria
- ...
Részletekért tekintsük meg az adott modul dokumentációját/forráskódját.
Vissza az oldal tetejére