Cílem této kapitoly je poskytnout základní přehled frameworku, který redakční systém využívá. S jeho znalostí budete moci psát vlastní knihovny a upravovat již existující. Detailnější popis jednotlivých tříd, funkcí a skriptů naleznete v dokumentaci k API (automaticky generované pomocí PHPDoc).
Dále je vhodné, pro snazší pochopení, průběžně konzultovat zde uvedené informace s hlavní knihovnou Core (vhodný příklad).
Každá stránka, která má být veřejně přístupná (pomocí URL), musí obsahovat následující fragment kódu:
define('APP_REQ', true);
require_once('../App/Req/rConfig.php');
První řádka - oznamuje všem vkládaným skriptů, že se jedná o regulérní požadavek (nikoli přímé volání nějakého knihovního skriptu).
Druhá řádka - vkládá konfiguraci aplikace a zajišťuje inicializaci jádra systému. Cesta je vždy relativní k danému skriptu.
Inicializaci jádra zajišťuje skript /Lib/Core/Req/rInit.php . Ten provádí:
Vytvoření všech implicitních/globálních objektů
Nastavení vlastního ovladače výjimek
Nastavení vlastního ovladače chybových stavů PHP
Framework zavádí tzv. implicitní objekty, které lze chápat jako globální a tedy kdekoliv použitelné objekty poskytující aplikaci základní funkčnost.
Jejich zpřístupnění ve třídách a funkcích je podmíněno použitím konstrukce: global <gProm>;
Detailní popis naleznete v dokumentaci k API.
Jazyk PHP standardně nevyužívá výjimek, proto framework pokrývá zpracování jak standardních chyb PHP, tak také výjimek.
Při inicializaci jádra jsou nastaveny obslužné funkce, které v případě, že chyba či výjimka nejsou aplikací ošetřeny, provedou výpis (případně trasování) a následný zápis do logovacího souboru (případně na obrazovku) – záleží na konfiguraci aplikace.
Výjimky jsou tedy generovány pouze samotným frameworkem. V zásadě rozeznáváme čtyři duhy:
Zálohují se data odeslaná metodou GET a POST
Výjimka se uloží do relace (session)
Přesměruje uživatele na předchozí navštívenou stránku
Na zadané stránce se nastaví implicitní objekt $gException na tuto výjimku
Obnoví se GET a POST parametry (např. Pro znovu naplnění formuláře)
Pak je na samotné stránce, jak výjimku ošetří (typicky zobrazí chybové hlášení)
Volte výstižný název s ohledem na konvence psaní kódu (tj. První písmena slov velká, bez mezer, bez diakritiky). Název bude sloužit i jako identifikátor pro volání akcí.
Pro vytvoření knihovny stačí vytvořit adresář v /Lib.
Předpokládá se adresářová struktura:
Pro běh knihoven nejsou kladeny žádné minimální požadavky. Vaše knihovna by měla být funkční i za předpokladu, že vytvoříte pouze jen to, co budete doopravdy potřebovat.
Adresář /Req (jako Require). Při importu knihovny se děje následující:
Je vložen rConfig.php – obsahuje pole $gConfig[] (konfigurace) a případně další nutný inicializační kód.
Je načten rSql.php – obsahuje pole $Sql[],
kde klíčem je identifikátor dotazu (konstanta) a
hodnotou samotný sql kód. Pokud je třeba využít
doplnění korétních hodnot až za běhu
aplikace, je doporučeno využít parametrizace dotazů
podporované ADOdb (tj. Otazník v místě, kde má
být vložena hodnota). Samotné volání se
provádí:
$gDb->Execute($gSql->GetSql('ID_DOTAZU'),
array(...pole parametrů...));
Adresář /Classes. Vzhledem k automatickému importu tříd (autoloading) je třeba striktně dodržovat konvence (tj. Název třídy a souboru se skládá z prefixuDelšíhoNázvu). Následující příklad vytváří instanci třídy:
$gLib->Import('Core'); // Nutné v případě, že není knihovna naimportována. Stačí uvést jednou pro celý skript.
$xPozadavek = new cHttpRequest();
Adresář /Actions.
Třídy akcí se řídí stejnými pravidly jako běžné třídy. Pouze s rozdílem, že musí implementovat rozhraní iAction.
Akce, které jsou určeny pouze pro administrační rozhraní (jsou skryté pro použití v obsahu) musí začínat výrazem 'Admin' (např.: cAdminContentBrowse).
Adresář /Templates. Je možné využít všech možností, které přináší šablonovací systém Smary (resp. třída cSmarty).
Tato třída standardně zpřístupňuje všechny globální objekty. Dále nabízí metodu SetLibTemplateDir(NázevKnihovny), která nastavuje adresář šablon daného modulu. Následující příklad volá šablonu z adresáře /Lib/Core/Templates/Admin.tpl:
$xSmarty = new cSmarty();
$xSmarty->SetLibTemplateDir('Core');
$xSmarty->Fetch('Admin.tpl');
Adresář /Lang. Zde je nutné:
Pro každý případný jazyk vytvořit vlastní adresář (dle konvencí). Například: English, Czech apod.
Hlavní soubor s jazykově závislými texty. Například: rEnglish.php, rCzech.php apod.
Stránky nápovědy pro jednotlivé akce knihovny: /Help/Actions/NázevAkce.html
Adresář /Styles. Zde budou zřejmě uloženy pouze styly, které jsou použitelné pro administrační rozhraní. Pro automatické připojení (použití) stylu v administraci je nutné vytvořit soubor Admin.css. Pokud budete chtít připojit další styly, můžete využít pravidla @import.
Adresáře /Images a /Scripts. Pro jejich použití v šablonách je vhodné využít jako prefix URL:
Globální šablonovací proměnnou $gAppUrl (udává absolutní URL ke kořeni aplikace, např.: http://cmsit.navlne.net)
Konfigurační proměnné $gConfig['APP_URL'], $gConfig['APP_URL_SSL']
Pro zapojení knihovny do administračního rozhraní je nutné:
V případe, že knihovna má mít vlastní menu, definovat soubor: /Templates/AdminMenu.tpl .
Volat akce administrace knihovny skriptem: Admin.php?Action=Knihovna:AdminNázevAkce
Projekt se řídí vlastními konvencemi, které je dobré dodržovat ;-)