123
„Programátor by měl být v prvé řadě líný.“ 123
PIFovo Web API (API = Application Programming Interface)
PWAPI Je to sada tříd a knihoven napsaných v objektovém PHP5 (framework) určených pro efektivní a jednoduché programování a úpravu webových prezentací.
Základní požadavky Usnadnění práce, ne její přidělání Kompaktní, avšak velice variabilní Jednoduchý objektový přístup k datům Snadná správa rozdílných konfigurací Podpora multijazyčných prezentací Struktura kódu je na programátorovi, ne na FW -> obstarává rámec
Charakteristika webu Vzhled stránky je pro každou prezentační vrstvu stejný, mění se jen obsah Obsah je uložen v databázi, ke kterému je přístup jak z uživatelské, tak z administrační vrstvy Často se přistupuje k databázi Web se mění podle toho, kde běží
Architektura OOP PHP5 Page – Storage - Template Stránka (PHP skript) Uložiště (PHP třída) Šablona (Smarty)
PWAPI konfigurace logika šablony různé vzhledy (frontend X backend) Fyzická struktura PWAPI konfigurace logika šablony různé vzhledy (frontend X backend)
Programátorský model
Vývojová prostředí Pod jedním PWAPI core kódem dokážeme spravovat nekonečný počet rozličných webů, takže je veškerý vývoj centralizován do jednoho adresáře. PWAPI se automaticky stará o nahrání příslušné konfigurace závislé na daném vývojovém prostředí, kdy předpokládáme, že stejný web bude finálně běžet na minimálně třech různých strojích a na každé toto prostředí jsou kladeny různé nároky.
Knihovna MyLiteDB Přístup ke každé tabulce probíhá na základě vylepšeného vzoru Active Record Odpadá složitá tvorba základních SQL dotazů INSERT, UPDATE, DELETE Zavedení standartizovaných už. typů pro jakýkoliv databázový sloupec, řešící běžné konverze dat (např. konverze pro formáty cen, datumu, texy! konverze, apod. Podpora rozhraní Iterator v databázovém výsledku pro PHP funkce foreach(), aj. Podpora automatického stránkování výsledku Snadný debug výpis dotazů společně s časovou náročností Automatický výběr sloupců z databáze odpovídající danému jazyku Platformová nezávislost
Uživatelské typy - rozhraní MyType Standartizované rozhraní pro tvorbu vlastních už. typů Vlastní už. typ vzniká děděním rodičovské třídy MyType Už. typ definuje rozličné konverzní funkce pro zápis anebo pro čtení z databáze MyType __construct(string $value, string $key, [string $type = 'TODB']) string getName () string getValue () string getValueFromDB () string getValueToDB ()
Příklad - už. typ MyDateNow class MyDateNow extends MyType { //konverze pro uložení dat do databáze – INSERT, UPDATE //vrátí řetězec odpovídající SQL funkci pro vložení času public function getValueToDB() { return 'NOW()'; } //konverze pro čtení pole typu Datetime v databázi //vrátí uživatelsky příjemně formátované datum public function getValueFromDB() { return Date("j.n.Y H:i",strtotime($this->value));
Příklad přístupu do databáze s MyLiteDB a PWAPI Ukázková aplikace: Návštěvní kniha se stránkováním
Návštěvní kniha - šablona <!– forum.tpl --> <form method='post' action='{urlSeo action="forum"}'> name: <input type='text' name='name' value='' /><br /> text: <textarea name='text'></textarea><br /> <input type='submit' value=' send ' /> </form> <!– vypsání možných chyb a stránkování --> <p>{$errors}{$notices}</p> <p>{$gb->paging->getXHTML()}</p> <!– procházení databázového výsledku --> {foreach key=cid item=con from=$gb} <div class='gb-prispevek'> <span>{$con->name}</span> v {$con->date} <p>{$con->text}</p> </div> {/foreach}
Návštěvní kniha – PHP kód class Forum extends ActiveRecord { } //vytvoření tabulky dle vzoru Active Record if( (!Empty($_POST) && (!Empty($_POST['name'])) && (!EMpty($_POST['text']))) { //Povinné údaje jsou vyplněny, uložíme do databáze $forum = new Forum('forum'); //vytvoření skladiště Active Record $forum->loadFromArray($_POST); //uložíme data z formuláře do objektu Forum $forum->setType('date','MyDateNow'); //konverze na aktuální datum $forum->setType('text','MyTexyString'); //konverze na texy formátovač if($forum->insert()) { //vykonání SQL dotazu INSERT do databáze Notice::getInstance()->setNotice('Váš příspěvek byl vložen.'); } else { Error::setError('Váš příspěvek NEbyl vložen.'); elseif(!Empty($_POST)) { Error::setError('Musíte zadat své jméno a text zprávy.'); $gb = MyLiteDb::getInstance()->pgexecute("SELECT * FROM forum ORDER BY date DESC"); $gb->setType('date','MyDateNow'); //konverze na formátování datumu $web->getTpl()->assign('gb',$gb); //výstup objektu do šablony
Oficiální stránky http://pwapi.broskev.cz Dokumentace: http://pwapi.broskev.cz/documentation/ © 2005 – 2007 Vojtěch “PIF” Schlesinger
Dotazy PWAPI::askNow( )