Základné princípy
Adresárová štruktúra
ModularCMS sa skladá z adresárov data, gfx, lib, src, tpl, user a súborov index.php a .htaccess.
Data
Adresár na ukladanie užívateľských dát ako sú obrázky do textu alebo fotky. Tento adresár spolu so všetkými podadresármi musí mať práva na zápis pre webový server.
Gfx
Tento adresár je určený na obrázky a kaskádové štýly ku grafickej šablóne. Obsahuje podadresár icons s ikonkami používanými v administrácií.
i18n
Adresár obsahuje súbory s internacionalizáciou, teda súbory s textovými konštantami pre jednotlivé jazyky.
Lib
Adresár s používanými knižnicami.
Src
V tomto adresári sa nachádzajú jednotlivých modulov.
Tpl
Adresár so šablónami. Podadresár compiled slúži na uchovávanie skompilovaných šablón a musí byť zapisovateľný webovým serverom.
User/Login
Podaresáre umožňujúce používanie prihlasovacej URL (/user/login namiesto index.php?cms=user/login) aj pri vypnutom mod_rewrite.
Súbor .htaccess
Tento súbor zabezpečuje prepisovanie zadávaných URL na súbor index.php so správnymi parametrami, čo umožňuje fungovanie ModularCMS s „krajšími" URL tvaru /content/nazov_clanku namiesto index.php?cms=/content/nazov_clanku. Tento súbor zabezpečí, že po zavolaní URL prvého typu sa systém správa, ako keby dostal požiadavku s URL druhého typu, k parametrom sa naviac pripojí &mr=1, čo umožní generovať URL prvého typu funkcií rAction().
V prípade, že server mod_rewrite nepodporuje, je je nutné tento súbor zmazať, systém bude automaticky používať URL druhého typu.
Beh programu (index.php)
Základ behu celého CMS systému tvorí súbor index.php v nasledujúcich krokoch :
Nastavenie kódovania pomocou hlavičky
Štandardne je nastavené kódovanie UTF-8
Zapnutie a nastavenie jazykových mutácií daného webu
Vytvorenie poľa s kódmi a názvami jazykov. Štandardne je použitý iba jeden jazyk, a to slovenčina. Všetky požadované jazyky musia byť v poli $r["i18n"]["languages"] a $r["i18n"]["language_names"] ešte pred prvým spustením
Nastavenie používaných premenných
Nastavenie premenných ako sú cesty k modulom, knižniciam, URL servera, indexový súbor a hlavný GET parameter.
Zapnutie output buffera a sessions
Zapnutie output buffera umožní posielať hlavičky počas celého behu skriptu a sessions sú potrebné kvôli prihlasovaniu užívateľov.
Vytvorenie poľa argumentov URL
Parametre v URL sa rozdelia do poľa
Nastavenie používaného jazyka
Z parametrov v URL sa zistí, ktorý jazyk je aktuálne používaný.
Načítanie jazykových súborov
Príprava prekladov pre používané jazyky.
Vytvorenie spojenia s databázou
Vytvorí sa objekt reprezentujúci spojenie s databázou na základe parametrov spojenia nastavených na začiatku skriptu.
Vytvorenie poľa modulov
Názvy všetkých dostupných modulov sú uložené (registrované) asociatívnom poli $r["modules"], kde kľúč predstavuje názov akcie a hodnota názov triedy.
Zistenie modulu, ktorý bude použitý (z argumentov)
Požadovaný modul je zistený podľa prvého argumentu v URL
Vytvorenie objektu reprezentujúceho požadovaný modul
Zavolanie metódy show() modulu
Zavolanie metódy, ktorá sa stará o spracovanie udalostí a zobrazenie obsahu.
Súbor index.php taktiež obsahuje funkcie __autoload(string) a rAction(string).
Funkcia __autoload(string)
Táto funkcia slúži na automatické načítanie požadovaného modulu zadaného ako parameter. PHP ju volá automaticky, ak narazí na objekt, ktorý nie je deklarovaný. Funkcia sa pokúsi nájsť súbor s daným objektom (modulom) v nastavených cestách a načítať ho.
Funkcia rAction(string)
Funkcia rAction slúži na prevod akcie, ktorá sa ma vykonať na URL. V prípade povoleného režimu mod_rewrite (indikovaný premennou $_GET["mr"] ) je vygenerovaná URL v tvare http://www.server.sk/jazyk/akcia, v opačnom prípade URL v tvare http://www.server.sk/index.php?cms=jazyk/akcia.
Vytvorenie objektu modulu
V poslednej fáze behu programu (skriptu index.php) je vytvorený objekt reprezentujúci požadovaný modul a zavolaná jeho metóda show. Každý modul musí byť registrovaný v poli $r["modules"] vrátane URL, ktorá je k nemu priradená, aby ho bolo možné správne vytvoriť.
Všetky objekty modulov sú odvodené od abstraktnej triedy Page, pri ich vytvorení sa teda volá konštruktor tejto triedy, ktorý zabezpečuje vygenerovanie liniek na zmenu jazyka (ak existuje viac jazykov), správu sessions a pozícií menu.
Metóda show každej triedy najprv volá metódu predka, abstraktnej triedy Page, ktorá sa stará o vygenerovanie menu a načítanie blokov a noviniek, prípadne iných modulov, ktorých výstup je zobrazený na každej stránke.
Trieda Admin
Trieda Admin je ako všetky ostatné triedy odvodená od abstraktnej triedy Page, odlišuje sa však svojím fungovaním. Jej funkciou nie je zobrazenie samotného obsahu a spracovanie s tým súvisiacich udalostí, ako pri ostatných triedach, ale skontrolovanie úrovne prístupu a zavolanie správneho administračného modulu podľa vyžadovanej akcie.
Táto trieda obsahuje pole $adminModules, do ktorého musia byť zaregistrované všetky administračné moduly rovnakým spôsobom, ako klientské moduly v súbore index.php.
Trieda Page
Táto trieda je predkom všetkých modulov a zabezpečuje základné funkcie celého ModularCMS. Jej konstruktor, zabezpečuje vygenerovanie odkazov na menu jazyka, kontrolu užívateľského prístupu, správu menu a hlavne inicializáciu šablónovacej knižnice PHP Smarty.
Trieda Page obsahuje dôležitú metódu show(), ktorú povinne volajú všetci jej potomkovia. Táto metóda zabezpečuje vygenerovanie menu, načítanie blokov a noviniek, teda prvkov, ktoré sa zobrazujú na každej jednej stránke vrámci ModularCMS.
Metóda uploadPhoto() tejto triedy je pomocná verejná metóda na nahrávanie a generovanie obrázkov, ktorá využíva knižnicu rGraphics z Rain frameworku. Táto metóda je využívaná modulmi Gallery a AdminInsetImages.
Trieda i18n
Trieda i18n slúži na lokalizáciu. Načítava textové konštanty pre jednotlivé jazyky z adresára i18n do asociatívneho poľa, ktoré následne využíva funkcia i18n::t, ktora slúžia na preklad jazykových konštánt na konkrétne texty aktívnom jazyku.
Úrovne prístupu
ModularCMS okrem anonymného prístupu, ktorý poskytuje prístup len ku modulom klientskej časti rozoznáva dva druhy autentizovaných užívateľov, a to administrátora a editora. Jednotlivý užívatelia sú uložený v tabuľke user, administrátor ma stĺpec type nastavený na admin, editor na editor.
Každý administračný modul si môže určiť, či povolí prístup iba administrátorovi, alebo editorovi. Kontrola sa vykonáva vždy pri vstupe do modulu pomocou metódy checkAccess() zdedenej od triedy Page. Každý administrátor ma vždy práva administrátora aj práva editora.
Menu pre autentizovaného užívateľa je uložené v súbore tpl/admin-links.tpl.


