Oficiální zadání práce
Transkript
Oficiální zadání práce Style Definition: Normal: Left, Line spacing: Multiple 1,3 li Seznamte se s existujícími redakčními systémy využívanými pro firemní prezentace. Proveďte jejich srovnání a zaměřte se na výhody a nevýhody jednotlivých řešení. Navrhněte a v programovacím jazyce PHP implementujte CMS systém určený pro prezentaci firmy. Při návrhu zohledněte nedostatky současných řešení. Implementovaný systém otestujte a výsledky testů vyhodnoťte. Style Definition: Heading 1 i Style Definition: Heading 4 ii České vysoké učení technické v Praze Fakulta elektrotechnická ¨ Bakalářská práce Modulární redakční systém (CMS), se zaměřením pro firemní prezentaci Petr Minařík Vedoucí práce: Ing. Martin Balík Studijní program: Softwarové technologie a management Obor: Web a multimedia Červen 2009 Formatted: Centered iv Poděkování Chtěl bych tímto poděkovat všem, co přispěli, ať již aktivně či pasivně ke vzniku této práce, především pak svému vedoucímu Ing. Martinu Balíkovi. v Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon). V Praze 12.6. 2009………………………………………………………………… vi Formatted: Font: 14 pt, Bold, Czech Abstract Formatted: Czech The work is focused on available content management systems and its comparison. The result of the work is design and implementation of self-created system suitable for use in corporate sphere, including implementation description and future vision. It also describes selection of suitable framework. Abstrakt Práce se zaměřuje na nabídku a srovnání redakčních systémů a jejich možností. Výsledkem práce je návrh a implementace vlastního modulárního systému vhodného pro využití ve firemní sféře, včetně popisu implementace a výhledu do budoucna. Současně také popisuje výběr vhodného frameworku pro vytvoření aplikace. vii viii Obsah Seznam obrázků .......................................................................................................... xixiv Seznam tabulek ......................................................................................................... xiiixvi 1 2 Úvod .......................................................................................................................... 1 1.1 Předmluva .......................................................................................................... 1 1.2 Cíle práce ........................................................................................................... 1 Analýza .................................................................................................................... 43 2.1 Požadavky ........................................................................................................ 73 2.2 Analýza současných redakčních systémů ........................................................ 73 2.2.1 Volně šiřitelné redakční systémy .............................................................. 83 2.2.2 Volně šiřitelné redakční systémy - shrnutí ............................................. 127 2.2.3 Komerční redakční systémy.................................................................... 127 2.2.4 Komerční redakční systémy – shrnutí .................................................... 149 2.3 3 Návrh řešení......................................................................................................... 1611 3.1 Výběr technologie ........................................................................................ 1611 3.1.1 PHP ....................................................................................................... 1611 3.1.2 MySQL ................................................................................................. 1611 3.2 Aplikace ....................................................................................................... 1611 3.3 Moduly ......................................................................................................... 1712 3.3.1 Základní moduly nutné pro chod aplikace ............................................ 1712 3.3.2 Standardní moduly ................................................................................ 1813 3.3.3 Rozšiřující moduly ................................................................................ 1813 3.4 Bezpečnost ................................................................................................... 1915 3.4.1 SQL injection ........................................................................................ 1915 3.4.2 Session stealing (hijacking) .................................................................. 2015 3.4.3 XSRF/XSRF (Cross-site request forgery) ............................................ 2015 3.5 4 Přínos mnou navrhovaného systému .............................................................. 149 Uživatelé ...................................................................................................... 2015 3.5.1 Superadministrator ................................................................................ 2015 3.5.2 Administrator ........................................................................................ 2116 3.5.3 Moderátor.............................................................................................. 2116 3.5.4 Přihlášený uživatel ................................................................................ 2116 3.5.5 Nepřihlášený uživatel ........................................................................... 2116 3.6 Use Case ....................................................................................................... 2116 3.7 Relační diagram ........................................................................................... 2318 Realizace.............................................................................................................. 2419 ix 4.1 Technické řešení ........................................................................................... 2419 4.2 Zend Framework........................................................................................... 2419 4.2.1 Komponenty Zend Frameworku ........................................................... 2520 4.2.2 Obsluha požadavku v Zend Frameworku.............................................. 2723 4.3 5 4.3.1 Adresářová struktura ............................................................................. 3025 4.3.2 Systém ................................................................................................... 3126 4.3.3 Jádro systému ........................................................................................ 3126 4.3.4 Moduly .................................................................................................. 3327 4.3.5 Implementace modulů ........................................................................... 3429 4.3.6 Lokalizace systému ............................................................................... 3731 Testování .............................................................................................................. 3933 5.1 6 Implementace (programátorská příručka) .................................................... 3025 Validita prezentačního kódu ......................................................................... 3933 5.1.1 XHTML ................................................................................................. 3933 5.1.2 CSS ........................................................................................................ 4033 5.2 Testování použitelnosti ................................................................................. 4033 5.3 Kompatibilita prohlížečů .............................................................................. 4034 5.4 Serverová část ............................................................................................... 4135 Závěr .................................................................................................................... 4437 A. Literatura ...................................................................................................................... 1 B. Seznam použitých zkratek ............................................................................................ 3 C. Uživatelská příručka ..................................................................................................... 5 a. Instalační příručka (pro MS Windows) ..................................................................... 5 i. Instalace PHP a MySQL ......................................................................................... 5 ii. Instalace CMS ...................................................................................................... 65 b. Administrační příručka ............................................................................................ 66 i. Správa modulů ...................................................................................................... 77 D. Obsah přiloženého CD ................................................................................................. 9 x Formatted: Indent: First line: 0 cm Seznam obrázků Obrázek 1: Primary use caseObrázek 1: Primary use case 2215 Obrázek 2: Relační diagram systému a základních modulůObrázek 2: Relační diagram systému a základních modulů 2316 Obrázek 3: Schéma vyřízení požadavku v Zend Frameworku [7]Obrázek 3: Schéma vyřízení požadavku v Zend Frameworku [7] 2922 Obrázek 4: Rozložení administračního rozhraníObrázek 4: Rozložení administračního rozhraní 74 xi Formatted: Czech xii Formatted: Indent: First line: 0 cm Seznam tabulek Tabulka 1: Srovnání volně šiřitelných redakčních systémů [2]Tabulka 1: Srovnání volně šiřitelných redakčních systémů [2] 94 Tabulka 2: Srovnání komerčních redakčních systémůTabulka 2: Srovnání komerčních redakčních systémů 137 xiii xiv 1 Úvod 1.1 Předmluva Na trhu existuje velké množství redakčních systémů (CMS), ale pro účely firemní prezentace nejsou zdaleka vhodné všechny. Zároveň u takovýchto systémů bývají nutné úpravy pro případné nestandardní funkcionality, které bývají především v komerčním sektoru velmi často požadovány. Motivací pro tento projekt je pro mne správa již několika internetových prezentací právě v tomto sektoru. V současné době využívají vlastní redakční systém, se značně zjednodušenou administrací, kterou bych rád do budoucna rozšířil. Z tohoto hlediska je pro mě oblast redakčních systémů zajímavým tématem vhodným k bližšímu pohledu nejen z uživatelského hlediska. Zároveň již při prvním bližším seznámení s open-source redakčními systémy, jejich strukturou a kódem, mi ve většině případů připadalo použité řešení a struktura zbytečně složitá. I z tohoto důvodu mne nejednou napadla myšlenka, vytvořit vlastní redakční systém, který by byl v tomto ohledu přívětivější. Na trhu existuje velké množství redakčních systémů (CMS), ale jen méně takových, které by se dali použít pro firemní prezentaci. Mojí prací bych se chtěl zaměřit právě na sektor menších až středních firem, které potřebují snadno upravovatelný a do budoucna rozšiřitelný portál.Mojí prací bych se chtěl zaměřit právě na sektor menších až středních firem, které potřebují snadno upravovatelný a do budoucna rozšiřitelný portál. Mojí motivací je správa již několika webových prezentacích právě v tomto sektoru. Prezentace mají prozatím pouze značně zjednodušenou administraci, kterou bych tímto projektem chtěl rozšířit. 1.2 Cíle práce Za cíl své práce jsem si tedy zvolil vytvořit vlastní redakční systém. V rámci návrhu CMS je součástí teoretické části analýza v současnosti dostupných redakčních systémů. Dále bude práce obsahovat návrh samotného systému, popis realizace a příručky. Svou prací bych se chtěl zaměřit právě na sektor menších až středních firem, které potřebují snadno upravitelný a do budoucna rozšiřitelný portál, zanalyzovat dostupné možnosti a v neposlední řadě navrhnout a realizovat vlastní řešení problému. Na samotný redakční systém, vzhledem k tomu, že požadavky ve firemní sféře bývají odlišné od požadavků pro běžné osobní použití, budou kladeny lehce odlišné nároky 1 oproti využití pro osobní potřebu. Prioritami budou snadná rozšiřitelnost a editace aplikace a podpora vícejazyčné prezentace již v základu. Důležitou součástí bude také možnost nasazení tohoto systému – vzhledem k tomu, že malé/střední firmy většinou nedisponují vlastním web-serverem a potřebnou konektivitou, předpokládá se nasazení podobné tomu v osobní sféře a to především s využitím webhostingových služeb. Navrhovaný systém tedy musí mít nízké nároky, jak softwarové, tak hardwarové, aby bylo možné vybírat z široké nabídky hostingů. Cílem mojí práce je tedy vytvořit redakční systém. Hlavním problémem většiny současných redakčních systémů je špatná nebo žádná podpora vícejazyčné prezentace, která hraje v dnešní době stále větší roli, především pak pro firmy. Proto bude mojí prioritou právě podpora vícejazyčné prezentace. Vzhledem k tomu, že každá firma má trochu rozdílné požadavky, co do funkčnosti, musí být stránky přizpůsobeny co nejvíce možnostem modifikace a rozšíření, pokud možno bez zásahu do funkčního kódu. V případě nutnosti takovýchto úprav, by měli být co nejjednodušší a intuitivní. K tomu bude přispívat dostatečná dokumentace celého kódu a struktura celé aplikace. Formatted: Czech Důležitou částí je také možnost nasazení tohoto systému – vzhledem k tomu, že malé/střední firmy většinou nedisponují vlastním web-serverem a budou tedy povětšinou využívat služeb různých hostingových služeb, musí redakční systém mít nízké nároky, jak softwarové, tak hardwarové. Formatted: Line spacing: 1,5 lines 2 3 2 Analýza Pro vytvoření firemní prezentace se nabízí mnoho alternativ. Od statických stránek, u kterých je pro běžného člověka téměř nemožná editace, přes jednoduché databázové aplikace s limitovanými možnostmi editace stránek až po komplexní systémy umožňující uživateli kompletní správu všech aspektů aplikace. V mé práci bych se pochopitelně chtěl zaměřit především na komplexnější CMS. Formatted: Czech 2.1 Požadavky 2.1.1 Obecné požadavky na aplikaci: Univerzálnost - měl by být schopen uspokojit potřeby zákazníků z širokého spektra firem zabývajících se různorodými činnostmi. Aplikace tedy musí být snadno upravitelná. Možnost širokého nasazení – vzhledem k cílenému nasazení aplikace na dostupné hostingové služby nesmí být výběr značně omezen samotnou aplikací. 2.1.2 Nefunkční požadavky Modularita - systém bude modulární v nejvyšší možné míře – jednotlivé moduly budou využívat vlastní konfigurační soubory, vlastní jazykové zdroje i vlastní databázové tabulky. Zároveň však budou moci využívat (bude-li třeba) zdroje jiných modulů případně globální zdroje. Využití frameworku – pro aplikaci jsem se rozhodl využít některého z dostupných frameworků, což je z mého pohledu jedna z věcí která může značně ulehčit vývoj a rozvoj aplikace. Adresářová a souborová struktura – aplikace musí mít logickou jednotnou adresářovou a souborovou strukturu pro snadnou orientaci. Toho bude dosaženo také díky modulárnosti systému a využití některého frameworku, který určitou strukturu doporučuje nebo přímo předepisuje. 2.1.3 Funkční požadavky Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,63 cm + Indent at: 1,27 cm Formatted: Heading 3 Formatted: Heading 3 Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,63 cm + Indent at: 1,27 cm Formatted: Heading 3 Rozlišení uživatelů - přihlášení/nepřihlášení. Přihlášení uživatelé můžou mít různé role. Správa aplikace - možnost změnit nastavení portálu z prostředí administračního rozhraní. Formatted: Font: Bold Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,63 cm + Indent at: 1,27 cm Formatted: Font: Bold Formatted: Font: Not Bold Správa uživatelských rolí a oprávnění - práva jednotlivých uživatelských skupin budou snadno přiřaditelná. Formatted: Font: Bold Správa jazykových verzí aplikace Formatted: Font: Bold Správa uživatelů Formatted: Font: Bold Správa navigace portálu - tvorba navigace portálu dle dostupných modulů Formatted: Font: Bold 4 Vícejazyčná podpora obsahu a rozhraní – vícejazyčná podpora internetové prezentace je především v dnešní domě velmi důležitou součástí moderních firemních webů. Toto musíme zohlednit především při návrhu databázové struktury. Systém musí podporovat jak vícejazyčnou prezentaci, tak vícejazyčné uživatelské rozhraní. Správa dostupných jazykových verzí nesmí být složitá a musí být realizována na úrovni uživatele. 2.2 Výběr technologie V prvé řadě je nutné vybrat technologii, kterou budu využívat v celé práci. Výběr technologie je omezen především požadavkem na co nejširší možnost nasazení. Od vzniku internetu vzniklo mnoho webových technologií umožňujících vývoj aplikací. Mezi nejrozšířenější patří ASP.NET (Microsoft), JSP (SUN, dnes již spadající pod spol. Oracle) a PHP (open-source). Mezi databázovými systémy jsou nejrozšířenějšími MySQL a PostgreSQL. Jak je zřejmé již ze zadání práce, jako technologie projektu byl zvolen právě jazyk PHP, který je především díky své jednoduchosti a neustávajícímu vývoji jednoznačně nejrozšířenější. Bohužel podporu pro jazyky JSP a ASP.NET nabízí jen malé procento společností poskytujících webhostingové služby. Za databázové řešení bylo zvoleno MySQL ze stejného důvodu. V případě databázové technologie se však předpokládá snadná změna na jiný typ databáze, vzhledem k tomu, že většina frameworků poskytuje abstraktní vrstvu pro snadné propojení s většinou databází. 2.2.1 PHP Serverový open-source skriptovací jazyk, který se poprvé objevil v roce 1995 a byl přímo vytvořen za účelem tvorby dynamických webových stránek. Jazyk byl vytvářen s důrazem na rychlost a jednoduchost, díky čemuž rychle získal na oblibě. Během dlouhého vývoje se jazyk vyvinul z jednoduchého skriptovacího jazyka určeného především pro vývoj osobních stránek (PHP zkratka původně znamenající „Personal Home Page“ – Osobní domácí stránka), na velmi komplexní objektově orientovaný programovací jazyk vhodný pro využití i pro náročnější aplikace. V současné době je PHP jednoznačně nejrozšířenější technologií pro malé až střední projekty 2.2.2 MySQL MySQL je nejrozšířenější open-source relační databázový systém (RDBMS) opět optimalizovaný především na vysokou rychlost, bohužel za cenu některých 5 zjednodušení, která jsou ale v posledních letech doplňována. MySQL podporuje také cizí klíče (foreign keys) pro tabulky typu InnoDB, které budu využívat, což zajišťuje další ochranu konzistence dat. 2.3 Výběr frameworku Pro svůj projekt jsem se rozhodl využít některého z dostupných PHP frameworků, od čehož si především do budoucna slibuji značné ulehčení práce, jednodušší rozšiřitelnost a hlavně nutné užití MVC architektury pro celou aplikaci. Pro potřeby mé práce jsem zvažoval jsem užití několika běžně rozšířených frameworků. Vzhledem k minimu praktických zkušeností s prací s PHP frameworky jsem mohl volit framework zcela svobodně na základě potřeb mé aplikace. Z tohoto důvodu jsem prověřil několika diskuzí a portálů jednotlivých frameworků, de mě zaujaly především frameworky Cake PHP, CodeIgniter, Nette a Zend Framework. Formatted: Heading 3 2.3.1 Cake php Rychlý framework Dobrá dokumentace Rozsáhlá komunita Formatted: Heading 3 2.3.2 Code Igniter: Nejrychlejší framework ze srovnávaných Jednoduchý Přizpůsobitelný Formatted: Heading 3 2.3.3 Nette: „Mladý“ projekt Horší dokumentace Jednoduchý Rychlý framework Formatted: Heading 3 2.3.4 Zend Framework: Pravděpodobně nejrozšířenější Rozsáhlé použití i ve firemní sféře Nejkomplexnější ze srovnávaných FW Velmi podrobná dokumentace, včetně příkladů užití,... Jednotný vývoj Horší podpora relačních databází Velmi dobře konfigurovatelný Rozsáhlá komunita 6 Horší podpora javascriptu Po pečlivé úvaze jsem jako framework pro svoji aplikaci zvolil Zend Framework (dále jen „ZF“), který se mi jeví jako nejvhodnější, především díky jeho rozšířenosti a komplexnosti. Důležitým prvkem byla vzhledem k absenci zkušeností také podrobná dokumentace. Srovnání rychlostí frameworků – zdroj: http://www.root.cz/clanky/velky-test-phpframeworku-zend-nette-php-a-ror/ 2.1 Požadavky Mezi hlavní požadavky systému patří jeho univerzálnost. Měl by být schopen uspokojit potřeby zákazníků z širokého spektra firem zabývajících se různorodými činnostmi. To bude zajištěno modularitou celého systému. Systém bude modulární v nejvyšší možné míře – jednotlivé moduly budou využívat vlastní konfigurační soubory, vlastní jazykové zdroje i vlastní databázové tabulky. Zároveň však budou moci využívat (bude-li třeba) zdroje jiných modulů případně globální zdroje. Systém musí obsahovat základní moduly nutné pro správu jak samotného systému tak pro správu prezentace. Musí být také jednoduše rozšiřitelný o další moduly poskytující další funkce. Samotné moduly musí být jednoduše přizpůsobitelné individuálním potřebám. Dalším velmi důležitým požadavkem je vícejazyčnost systému – a to jak obsahu, tak rozhraní. Toto musíme zohlednit především při návrhu databáze. Systém musí podporovat jak vícejazyčnou prezentaci, tak vícejazyčné uživatelské rozhraní. Správa jazykových verzí nesmí být složitá a musí být realizována na úrovni uživatele. 2.22.4 Analýza současných redakčních systémů Pro potřeby vývoje vlastního systému jsem se rozhodl srovnat některé současné redakční systémy, abych zjistil, co nabízejí, jaké jsou jejich nedostatky a mohl se tak vyvarovat chyb nebo se naopak inspirovat zajímavými nápady. Zaměřím se především na volně dostupné open-source CMS, ale pokusím se ohlédnout i za uzavřenými systémy. Kritéria vyplývající z mých požadavků která budu u systémů sledovat především pro mne budou: Struktura aplikace, jak z hlediska kódu, tak z hlediska souborového uspořádání 7 Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,63 cm + Indent at: 1,27 cm Možnosti přizpůsobení a rozšíření Podpora vícejazyčné prezentace Zohledňovat budu také další parametry, jako například dostupnou dokumentaci a podporu pro daný redakční systém. 2.2.12.4.1 Volně šiřitelné redakční systémy V této kapitole bych chtěl provést srovnání nejznámějších volně šiřitelných CMS. Pro srovnání dostupných systémů jsem vybíral podle obecného povědomí o těchto systémech, jejich rozšíření a uživatelské komunity. Systémy, které jsem zvolil pro srovnání, jsou: Drupal, Joomla, Mambo, OpenCMS, WordPress a Xoops. V následující tabulce bych chtěl nastínit prezetovat základní možnosti těchto vybraných redakčních systémů. Uživatelská část redakčních systémů byla testována pomocí portálu http://www.opensourcecms.com/ [1]. 8 Formatted: Default Paragraph Font, English (U.S.) Systém Jazyk Drupal Joomla Mambo OpenCMS WordPress Xoops PHP PHP PHP Java PHP PHP MySQL MySQL Databáze MySQ L, Postgre SQL MySQ L MySQL Oracle, MySQL, PostgreSQL, MS SQL Server, DB2, AS400 a HSQL Cena Modulární Zdarma Ano Zdarma Ano Zdarma Ano Zdarma Ano Zdarma Ano Zdarma Ano Ne Ne Ano Ano Ano Ano Ano Add-on Ano Ano Ano Ne Add-on Limitovaná Add-on Ano Ano Ano Add-on Add-on Ano Ano Ne Add-on Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Add-on Ano Ano Ano Ano Add-on Add-on Ano Ne Ano Limitovaná Add-on Add-on Ne Add-on Ne Add-on Ne Ne Limitovaná Add-on Add-on Add-on Ne Ano Ano Ano Ano Ano Ano Flexibility Vícejazyčný obsah URL rewrite Ano Ano Add-on Add-on Add-on Ano Ano Ano Add-on Ano Add-on Add-on Moduly Ankety Katalog produktů Fórum Foto galerie Ano Add-on Ano Add-on Ano Ano Add-on Add-on Ano Add-on Add-on Add-on Add-on Placený Add-on Ano Add-on Ne Add-on Add-on Ano Add-on Ano Add-on Interoperabilita RSS XHTML validita Add-on Ano Add-on Ne Add-on Ano Bezpečnost SSL login SSL prohlížení Potvrzení emailu Ověřovací kódy (anti-spam) Podpora Dokumentace Komunitní portál Jednoduchost užití WYSIWYG editor Změna velikosti obrázků Správa souborů Zip archivy Vícejazyčné rozhraní Placený Ano Add-on Ano Tabulka 1: Srovnání volně šiřitelných redakčních systémů [2] 9 Add-on Ne 2.2.1.12.4.1.1 Drupal http://www.drupal.org/ Výhody: Objektově orientovaná struktura aplikace Kód vhodný k editaci Jednoduchá tvorba šablon Nevýhody: Složitější instalace Samotný kód není objektově orientovaný Drupal se jeví jako velmi schopný redakční systém, který je možné použít pro firemní prezentaci – také je ze všech výše zmíněných systémů pro tyto účely nejpoužívanější. Drupal také disponuje velkou uživatelskou komunitou, což je značnou výhodou při řešení problémů a úprav systému. Za zásadní nevýhodu považuji, že systém není objektově orientován. 2.2.1.22.4.1.2 Joomla http://www.joomla.org/ Výhody: Velmi populární systém, Široká komunitní podpora Mnoho uživatelských rozšíření Jednoduchá instalace Nevýhody: Složitá architektura Limitovaná možnost správy uživatelských práv Vyšší systémová náročnost Joomla je velmi rozšířený redakční systém, především ale pro osobní stránky a prezentace. Pro použití v rámci firemních prezentací je využíván podstatně méně. Předpokládám, že je to především díky složité architektuře celého systému, která značně znesnadňuje případné úpravy, které jsou pro firmy důležité.. 2.2.1.32.4.1.3 Mambo http:// mambo-foundation.org/ Formatted: No underline, Font color: Auto, Czech 10 Výhody: Systémově nenáročný Nevýhody: Méně rozšíření Menší komunita Mambo bych označil za zjednodušenou verzi CMS Joomla – jednodušší architektura, méně rozšíření a menší komunita. Mambo je také velmi často používáno pro firemní účely, z mého pohledu je jeho nejslabším článkem podpora vícejazyčných prezentací. 2.2.1.42.4.1.4 OpenCMS http://www.opencms.org/ Nevýhody: Platforma Java OpenCMS je založeno na platformě Java, která je bohužel minimálně rozšířená v rámci běžných hostingových programů. Tudíž je nevhodná pro toto využití. 2.2.1.52.4.1.5 WordPress http://wordpress.org/ Nevýhody: Nejedná se o plnohodnotné CMS, ale spíše o blogovací systém Velmi rozšířený systém, bohužel vzhledem k jeho zaměření je taktéž nevhodný. 2.2.1.62.4.1.6 Xoops http://www.xoops.org/ Výhody: Důraz na bezpečnost a stabilitu Integrace Frameworku PHP Pear Nevýhody: Špatná podpora „hezkých URL“ (mod rewrite) Xoops se jeví jako velmi zajímavé řešení. Z výše zmíněných systémů je pravděpodobně nejméně používaný. Jeho Nnevýhodou Xoops je opět horší podpora vícejazyčných 11 prezentací. Xoops také často využívá přesměrování, která mohou mást roboty internetových vyhledávačů. 2.2.22.4.2 Volně šiřitelné redakční systémy - shrnutí Z volně šiřitelných systémů se jako nejvhodnější jeví CMS Drupal, který nabízí relativně jednoduché přizpůsobení, rozsáhlou komunitu a množství rozšíření. Za společnou nevýhodu, kterou považuji za celkem zásadní u představených CMS vidím nevyužití některého z hlavních, komplexnějších PHP frameworků, který by značně ulehčil další rozšiřování aplikace. 2.2.32.4.3 Komerční redakční systémy Jak je zřejmé, Uu komerčních systémů není běžně dostupný zdrojový kód, budu tedy vycházet z jejich demoverzí uvedených na oficiálních stránkách vývojáře. Ze stejného důvodu se nebudu nijak věnovat programové struktuře. Pro srovnání jsem volil systémy dle stránek, na kterých byly nasazeny a dle pozic, v jakých byli nalezeny internetovým vyhledávačem Google. Bohužel většina komerčně nabízených systémů nenabízí veřejně dostupnou testovací verzi. Většinou je dostupné pouze omezená demo verze nebo je nutné zažádat o povolení přístupu. Z tohoto důvodu jsem Pproto zvolil byly vybírány pouze 2 systémy, které umožňující přímé vyzkoušení zdarma. 12 Formatted: No underline, Font color: Auto, Czech Aitom Systém Jazyk Databáze Cena Modulární InstantWeb PHP MySQL Na dotaz Ano PHP 9990,Ano Bezpečnost SSL login SSL prohlížení Potvrzení emailu Ověřovací kódy (anti-spam) Ano Ano - Ano Ano Ne Podpora Dokumentace Komunitní portál Ano Ne Ano Ne Jednoduchost užití WYSIWYG editor Změna velikosti obrázků Správa souborů Zip archivy Vícejazyčné rozhraní Ano Ano Ano Ano Ano Ne Ne Flexibility Vícejazyčný obsah URL rewrite Ano Ano Ne Ano Moduly Ankety Katalog produktů Fórum Novinky Foto galerie Ano Ne Ne Ano Ano Placený Placený Ne Ano Ne Interoperabilita RSS XHTML validita Ne Ne Ne Ne Tabulka 2: Srovnání komerčních redakčních systémů 2.2.3.12.4.3.1 Aitom http://www.aitom.cz/ 13 Výhody: Ucelené řešení Propracované Nevýhody: Nepřehledná administrace Ukázková prezentace působí velmi solidním dojmem, bohužel administrační rozhraní systému mi přišlo nepříliš zdařilé. 2.2.3.22.4.3.2 InstantWeb http://www.instantweb.cz Nevýhody: Chybí podpora vícejazyčných stránek Málo možností administrace Vzhled prezentace nepůsobí profesionálním dojmem, avšak administrace a její struktura vypadá zdařile. Bohužel během testování administračního rozhraní se vyskytovali neošetřené chyby v PHP. 2.2.42.4.4 Komerční redakční systémy – shrnutí 2.3 Komerčních redakčních systémů je na trhu obrovské množství lišící se zaměřením, složitostí a v neposlední řadě uživatelskou podporou. Z mnou testovaných systémů bych si pravděpodobně pro své účely nezvolil ani jeden, neboť nedisponují kvalitami, které hledám. 2.42.5 Přínos mnou navrhovaného systému Mnou navrhovaný systém bude dbát jak především na programovou část, kde bude využívat logické MVC struktury, vhodné k pozdějším úpravám, tak i adresářové struktury pro větší přehlednost. takBudu dbát také na část uživatelskou, kde se vynasnažímbudu snažit o co největšíyšší uživatelskou přívětivost, jednoduchost a logiku a smysluplnost navigace, kteréá nebudoue na úkoromezovat funkčnost celéhoi systému. Systém musí být bude zaměřen na vícejazyčnou prezentaci a bude tak také navrhnut, . Toto řešení umožní unadněníaby byla práce s jednotlivými jazykovými verzemi. co nejjednodušší. Dalším Hlavním přínosem mého systému bude využití některého ze známých a používaných frameworků, což značně ulehčí jeho další rozšiřovaní a úpravy. 14 Formatted: Normal 15 3 Návrh řešení 3.1 Výběr technologie Od vzniku internetu vzniklo mnoho webových technologií umožňujících vývoj aplikací. Mezi nejrozšířenější patří ASP.NET (Microsoft), JSP (SUN, dnes již spadající pod spol. Oracle) a PHP (open-source). Především pak jazyk PHP je díky své jednoduchosti a neustávajícím vývoji jednoznačně nejrozšířenější. Mezi databázovými systémy jsou nejrozšířenějšími MySQL a PostgreSQL. Jako technologii pro svůj systém jsem vzhledem k rozšířenosti zvolil právě jazyk PHP a databázi MySQL. Zároveň však systém bude připraven na využití i jiného databázového systému. Dbáno bude na také na bezpečnost systému. 3.1.1 PHP Serverový open-source skriptovací jazyk, který se poprvé objevil v roce 1995 a byl přímo vytvořen za účelem tvorby dynamických webových stránek. Jazyk byl vytvářen s důrazem na rychlost a jednoduchost, díky čemuž rychle získal na oblibě. Během dlouhého vývoje se jazyk vyvinul z jednoduchého skriptovacího jazyka určeného především pro vývoj osobních stránek (PHP zkratka původně znamenající „Personal Home Page“ – Osobní domácí stránka), na velmi komplexní objektově orientovaný programovací jazyk vhodný pro využití i pro náročnější aplikace. 3.1.2 MySQL MySQL je nejrozšířenější open-source relační databázový systém (RDBMS) opět optimalizovaný především na vysokou rychlost, bohužel za cenu některých zjednodušení, která jsou ale v posledních letech doplňována. MySQL podporuje také cizí klíče (foreign keys) pro tabulky typu InnoDB, které bud využívat, což zajišťuje další ochranu konzistence dat. 3.23.1 Aplikace Systém bude vyvíjen modulárně, tj. bude obsahovat společné jádro zajišťující základní společné funkce a především pak interakci jednotlivých modulů. a moduly, zajišťující samotnou funkčnost aplikace. Společné jádro aplikace bude zajišťovat umožňovat práci jednotlivých modulů, načítání překladů a lokále aplikace, URL routování, cachování, zobrazení a v neposlední řadě nastavení aplikace. Veškerou ostatní funkčnost budou zajišťovat jednotlivé moduly. 16 Klientská část bude realizována pomocí XHTML, CSS, JAVASCRIPTu a případně AJAXu, bude dodržovat standardy a bude podporovat zobrazení ve všech moderních majoritních v současnosti používaných prohlížečích – Internet Explorer (verze 6 a vyšší), Mozzila Firefox (verze 3 a vyšší), Opera (verze 9 a vyšší), Google Chrome a Safari. 3.33.2 Moduly V základní verzi mnou navrhovaného CMS bych chtěl realizovat následující moduly, které jsou pro činnost aplikace nezbytné a dále prezentační modul pro publikaci obsahu.z mého pohledu a průzkumu nejčastěji vyžadovány. Všechny moduly budou podporovat vícejazyčné zobrazení. Každý modul bude mít zvlášť prezentační a administrační část. Zároveň může modul umožňovat využití jen částečných zobrazení v rámci celé aplikace. 3.3.13.2.1 Základní moduly nutné pro chod aplikace Moduly poskytující základní funkčnost redakčního systému. 3.3.1.13.2.1.1 Uživatelé Modul pro správu uživatelů aplikace, v základní verzi pouze uživatelé s přístupem do administrace. Možnost rozšíření o registraci uživatelů v případě, že to aplikace bude vyžadovat. Administrace: přidání uživatele, editace, možnost dočasné deaktivace účtu, zamezení přístupu 3.3.1.23.2.1.2 Oprávnění Modul pro správu oprávnění. Bude definovat přístup k jednotlivým částem systému a oprávnění k jednotlivým akcím. Jednotlivá oprávnění budou přiřazována uživatelským skupinám. Administrace: vytvoření skupiny, přiřazení/odebrání práv skupině 3.3.1.33.2.1.3 Jazyky Modul pro správu jazyků aplikace. Možnost přidání/odebrání jazyka, ve kterém bude možné CMS využívat a pro který budeme moci v jiných modulech vytvářet jazykové mutace. Administrace: přidání jazykau, odstranění 3.3.1.43.2.1.4 Navigace Modul pro správu navigace webové prezentace, umožňující víceúrovňové menu odkazující na různé moduly aplikace. 17 Administrace: přidání položky do menu, změna pořadí, odstranění položky Zobrazení: jednoúrovňové menu se zobrazením sub-menu nebo víceúrovňové DHTML menu 3.3.23.2.2 Standardní moduly 3.3.2.13.2.2.1 Stránky Hlavní modul pro zobrazování aplikace, umožňující vytvářet jednotlivé informační stránky. Součástí bude WYSISWYG editor pro formátování stránky. Administrace: přidání stránky, editace, správa jazykových verzí, možnost skrytí stránky z obsahu viditelného pro uživatele Zobrazení: standardní HTML zobrazení 3.3.33.2.3 Rozšiřující moduly Následující moduly by mohli rozšiřovat funkčnost a možnosti mnou navrhovaného systému v blízké budoucnosti. 3.3.3.13.2.3.1 Správa souborů Modul umožňující nahrávat a organizovat soubory pro využití v prezentaci. Administrace: nahrání souboru do složky, přesun, smazání 3.3.3.23.2.3.2 Foto galerie Modul zajišťující správu fotografií. Jednotlivé fotografie budou organizovány do galerií. Ty pak budou představovat jednotlivé prezentační části. Uživatel bude moci provádět základní úpravy obrázku (změna rozlišení). Administrace: přidání galerie, přidání obrázku, úprava obrázku, možnost skrytí galerie/obrázku z obsahu viditelného uživateli Zobrazení: standardní HTML zobrazení, využití javascript 3.3.3.33.2.3.3 Novinky a akce Upozorňování na probíhající akce a novinky. Administrace: přidání novinky, editace, správa jazykových verzí, možnost skrytí novinky z obsahu viditelného pro uživatele Zobrazení: standardní HTML zobrazení 3.3.3.43.2.3.4 Newsletter 18 Modul pro správu hromadného rozesílání reklamních a promočních akcí, upozornění uživatelům. Umožňuje přidání a odebrání jak registrovaných tak neregistrovaných uživatelů. Administrace: tvorba newsletteru, rozesílání všem/vybraným uživatelů (například na základě preferované jazykové verze) Zobrazení: možnost zařadit/odhlásit se do newsletteru – vyžaduje autorizaci emailem 3.3.3.53.2.3.5 Ankety Modul pro výzkum názoru návštěvníků stránek. Administrace: tvorba anket, editace, archivace Zobrazení: možnost hlasovat v anketách 3.3.3.63.2.3.6 Katalog produktů Modul umožňující představit zákazníkovi firmou nabízené produkty, případně vytvořit poptávku na tyto produkty. Bude umožňovat správu jednotlivých kategorií a podkategorií a produktů. Modul bude navrhován tak, aby bylo jednoduché přidání parametrů ke každému produktu. Jako moduly rozšiřující tento by se dal uvažovat elektronický obchod, případně skladový modul. Administrace: přidávání, editace produktů, správa kategorií 3.3.3.73.2.3.7 Diskusní fórum Využití tohoto modulu by mohlo být například pro podporu jednotlivých výrobků, diskuzi o nich. Umožňuje spravovat kategorie, příspěvky a uživatele. V rámci fóra budou mít uživatelé přiřazeny role (například moderátor diskuze). 3.3.3.83.2.3.8 Reklamace/technická podpora pro zákazníky Modul umožňující zákazníkům zadávat reklamace/jiné technické problémy. Umožňuje zákazníkům kontaktovat uživatelskou podporu, sledovat vývoj řešení problému. 3.43.3 Bezpečnost Bezpečnost je důležitou součástí každé aplikace. Samozřejmostí je bude tedy ochrana před běžnými útoky jako SQL injection, session stealing a XSRF/CSRF (Cross-site request forgery). 3.4.13.3.1 SQL injection 19 Technika napadení databázové vrstvy programu vsunutím (odtud „injection“) kódu přes neošetřený vstup a vykonání vlastního, samozřejmě pozměněného, SQL dotazu. Toto nechtěné chování vzniká při propojení aplikační vrstvy s databázovou vrstvou (téměř vždy se totiž jedná o dva různé programy) a zabraňuje se mu pomocí jednoduchého escapování potencionálně nebezpečných znaků. [zdroj: http://cs.wikipedia.org [3], více informací http://cs.wikipedia.org/wiki/SQL_injection] 3.4.23.3.2 Session stealing (hijacking) Formatted: Default Paragraph Font, English (U.S.) Formatted: Font: 12 pt, Not Bold, No underline, Font color: Auto, Czech Field Code Changed Jedná se o metodu, při které útočník získá session ID přihlášeného uživatele a tím získá veškerá jeho oprávnění v systému. 3.4.33.3.3 XSRF/XSRF (Cross-site request forgery) jedná se o zneužití session přihlášeného uživatele za účelem předání žádosti serveru s podvrženými informacemi. Například vložením obrázku s URL s parametry. 3.53.4 Uživatelé Uživateliem systému bude v základu pouze administrátor (administrátoři). V případě, že systém, respektive modul, bude vyžadovat uživatelskou registraci, bude mu tato umožněna. Uživatelé budou moci být přiřazování do skupin, které budou mít nastavitelná oprávnění ke všem akcím. Ostatní akce jím budou zamítnuty. 3.4.1 Uživatelské role Uživatelé budou moci být přiřazování do skupin, které budou mít nastavitelné oprávnění ke všem akcím. Ostatní akce jím budou zamítnuty. V základu bude aplikace obsahovat pouze jednu neodstranitelnou roli Superadministratora a k ní přiřazený Superadministrátorský účet. Ostatní role je možné vytvořit a přiřadit jim práva podle potřeby. Uživatelské účty budou vytvářeny administrátorem, heslo je uživateli zasláno na vyplněný email, který slouží zároveň jako přihlašovací jméno. Formatted: Normal 3.5.13.4.1.1 Superadministrator Primární skupina obsahující základního uživatele, mající veškerá práva. Přístup do administračního rozhraní, správa celého systému. Možnost vytváření vlastních jiných uživatelských rolí (skupin) a přiřazování k jednotlivým uživatelům. A každé možnost nastavit detailně veškerá práva. U každé 20 skupiny bude možnost přiřadit vlastní práva dle možností jednotlivých modulů či aplikace. Tato práva jsou předvolená s každým modulem. 3.5.23.4.1.2 AdministratorJiný registrovaný uživatel Formatted: Heading 4 Přístup do administračního rozhraní. Každý administrátor bude mít možnost přidělení určité role, která bude měnit jeho oprávnění. V závislosti na těchto oprávněních bude moci provádět pouze určitou interakci s určitými částmi systému – například administrátor pověřený editací článků nemůže přistupovat do administrace uživatelů. 3.5.3 Moderátor Registrovaný uživatel s právy moderátora může být přiřazen například pro moderování diskusního fóra. Formatted: Heading 4 3.5.4 Přihlášený uživatel Práva jako nepřihlášený plus možnost interakcí s částmi stránek vyžadujících přihlášení – například diskusní fórum. Formatted: Heading 4 3.5.53.4.1.3 Nepřihlášený uživatel Formatted: Heading 4 Jeho možnosti budou v současné aplikace omezeny na prohlížení stránek, případně registraci do mailingových listů.. 3.63.4.2 Use Cases pro uživatelské role Formatted: Heading 3 V následující tabulce je zevrubný přehled předpokládané hierarchie uživatelských rolí. Formatted Table Role Superadministrator Jiný registrovaný uživatel Unregistered user Tabulka 3: Hierarchie uživatelských rolí V následujícím Use Case diagramu je možné vidět předpokládané akce, které bude možné přiřadit jednotlivým uživatelským rolím dle dostupných modulů. 21 Formatted: Normal, Left Obrázek 1: Primary use case 22 3.5 Databázové řešení Aplikace bude využívat relační databázi MySQL se storage enginem InnoDB. Hlavní výhodou InnoDB enginu je možnost využití cizích klíčů a tím zaručení konzistence databáze již na databázové vrstvě aplikace. Samotná struktura databáze bude odpovídat jednotlivým modulům. Pro ilustraci je přiložen relační diagram [Obrázek 2: Relační diagram systému a základních modulů]. Databázová struktura: Oprávnění o Acl_resources – obsahuje zdroje, tj. názvy modulů o Acl_privileges – obsahuje privilegia – přístupy k akcím v rámci modulu o Acl_roles – definuje jednotlivé uživatelské role a jejich názvy o Acl_roles_privileges – přiřazení privilegií jednotlivým rolím Uživatelé: o Users – obsahuje uživatele a jejich údaje Jazyky: o Langs – definice jazyků používaných v rámci CMS Stránky o Pages – obsahuje stránky o Pages_lang – obsahuje jazykové mutace dané stránky 3.73.5.1 Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,63 cm + Indent at: 1,27 cm Formatted: Font: Bold, No underline, Font color: Auto Formatted: List Paragraph, Bulleted + Level: 2 + Aligned at: 1,9 cm + Indent at: 2,54 cm Formatted: Font: Bold, No underline, Font color: Auto Formatted: Font: Bold, No underline, Font color: Auto Formatted: Font: Bold, No underline, Font color: Auto Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,63 cm + Indent at: 1,27 cm Formatted: Font: Bold, No underline, Font color: Auto Formatted: List Paragraph, Bulleted + Level: 2 + Aligned at: 1,9 cm + Indent at: 2,54 cm Relační diagram Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,63 cm + Indent at: 1,27 cm Formatted: Font: Bold, No underline, Font color: Auto Formatted: List Paragraph, Bulleted + Level: 2 + Aligned at: 1,9 cm + Indent at: 2,54 cm Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,63 cm + Indent at: 1,27 cm Formatted: Font: Bold, No underline, Font color: Auto Formatted: List Paragraph, Bulleted + Level: 2 + Aligned at: 1,9 cm + Indent at: 2,54 cm Formatted: Font: Bold, No underline, Font color: Auto Formatted: Heading 3 Obrázek 2: Relační diagram systému a základních modulů 23 4 Realizace 4.1 Technické řešení Výběr technologií pro moji aplikaci jsem již zmínil v předchozích částech práce, proto bych jen pro připomenutí zmínil, že serverová část aplikace bude je realizována pomocí technologie PHP a databázová s využitím MySQL s enginem InnoDB. Důvodem volby PHP je především rozšířenost na téměř všech hostingových službách, které bývají pro malé a střední firmy nejvýhodnějším řešením pro realizaci vystavení svých prezentací. PHP jako jazyk pokládám za je plně dostačující pro veškeré současné i budoucí potřeby projektu. Pro svůj projekt jsem se rozhodl využít některého z dostupných PHP frameworků, od čehož si slibuji, především do budoucna, značné ulehčení práce, jednodušší rozšiřitelnost a především užití MVC architektury pro celou aplikaci. Zvažoval jsem užití několika běžně rozšířených frameworků. Vzhledem k minimu praktických zkušeností s prací s PHP frameworky jsem mohl volit framework zcela svobodně nazákladě potřeb mé aplikace. Po pečlivé úvaze jsem jako framework pro svoji aplikaci zvolil Zend Framework (dále jen „ZF“), který je pravděpodobně nejpopulárnějším a nejrozšířenějším PHP frameworkem. Jako databáze slouží MySQL, vzhledem k použitému frameworku však není problém rozšířit funkcionalitu i pro další databáze, například PostgreSQL nebo Oracle. 4.2 Zend Framework ZF je celosvětově uznávaným open-source frameworkem využívaným od relativně jednoduchých aplikací až po složité a komplexní systémy. Byl zvolen jako framework pro mnohé rozsáhlé celosvětově známé projekty společností jako například „Fox Interactive Media - IGN Entertainment division“, „Varien - Magento eCommerce Platform“, „Panasonic“ a mnohými dalšími. [4] Historicky se počátek ZF datuje do roku 2005, první verze byla představena v roce 2007. [5] Filozofií ZF je přizpůsobení se vývojáři, ne přizpůsobení se vývojáře frameworku. Není zde jednotné paradigma, které je nutné následovat, pouze doporučení pro nejvhodnější a nejoptimálnější užití.[5] 24 Kód ZF je bohatě dokumentován, oficiální web nabízí množství tutoriálů a referenční příručku ke všem komponentám ulehčující především počátky práce s frameworkem. Dalším velmi podstatným prvkem je celosvětová rozšířená rozsáhlá komunita uživatelů. ZF nabízí komponenty pro téměř veškeré potřeby, které při budování aplikace můžeme mít. V tomto směru se může zdát redakční systém jako relativně jednoduchá aplikace, ale v případě budoucího rozšiřování, například pro použití jako vnitřního informačního systému firmy, je vhodné být připraven, než narážet na se nechat omezovat limity zvoleného frameworku. Další výhodou ZF je jednoduchá rozšiřitelnost a tak je dostupné velké množství dalších komponent. Není tedy problém rozšířit funkčnost aplikace například o šablonovací systémy, jakými jsou například Smarty nebo PHPtal s XML syntaxí. 4.2.1 Komponenty Zend Frameworku ZF nabízí obrovské rozsáhlé množství komponent usnadňující tvorbu aplikace. Vzhledem k tomu, že znalost ZF je nezbytná pro pochopení procesů, které probíhají v aplikaci, chtěl bych v několika následujících odstavcích přiblížit ty komponenty, které využívám. V následujících několika odstavcích bych chtěl zmínit několik nejdůležitějších použitých v mnou navrhnutém systému. Informace k jednotlivým komponentám jsou výsledkem především zkušeností z využití, kde jde o snadnější pochopení, jak aplikace funguje a co využívá. Detailní informace o všech komponentách je dostupná v referenční příručce ZF dostupném na adrese http://framework.zend.com/manual/en/ [6] 4.2.1.1 Zend_Acl Komponenta zajištující správu uživatelských oprávnění. Nabízí podporu různých uživatelských rolí, přidělování jednotlivých i obecných oprávnění jakožto i výjimek. Zároveň nabízí podporu dědičnosti jak rolí tak oprávnění. 4.2.1.2 Zend_Application Je novou komponentou představenou v prozatím poslední verzi ZF 1.8. Primárním účelem této komponenty je bootstrap aplikace, tj. inicializace jednotlivých komponent, zdrojů, modulů. Zároveň je zde dlouho žádaná přímá podpora pro automatický bootstrap jednotlivých modulů. 4.2.1.3 Zend_Auth Singleton komponenta zajišťující ověření a udržení identity přihlášeného uživatele. Pro uchování identity využívá instanci Zend_Session. 4.2.1.4 Zend_Cache 25 Formatted: Default Paragraph Font, English (U.S.) Zend_Cache zajišťuje uchování již zpracovaných dat v rámci aplikace pro rychlejší pozdější přístup. V rámci cache můžeme uchovávat různorodá data, jako například výsledky SQL dotazů, objekty překladových knihoven a mnohé další. Tímto můžeme značně zrychlit chod naší aplikace a snížit systémovou náročnost. 4.2.1.5 Zend_Config a Zend_Config_Writer Zend_Config načítá konfigurační data pro další využití v aplikaci. Jako zdroj konfigurace slouží XML případně INI soubory. Writer jak už název napovídá, slouží ke zpětnému uložení konfigurace do souboru. 4.2.1.6 Zend_Controller Srdce ZF MVC systému. Zajišťuje zpracování žádostí, routování požadavků. Samotný controller systém byl navržen s vysokými požadavky na jeho rozšiřitelnost například pomocí různých plug-inů. 4.2.1.7 Zend_Db Komponenta pro správu přístupu k databázi a dotazů. Součástí komponenty je Zend_Db_Table pro logickou reprezentaci tabulek v databázi a jejich vztahů. Bohužel potenciál této komponenty není plně využit, neboť neimplementuje ORM (ObjectRelational mapping), tudíž jsou operace nad více tabulkami značně ztíženyý. Problém nastává především v případě kdy je potřeba využívat spojování tabulek (JOIN operace). V tomto případě je nutné v podstatě manuálně psát SQL dotazy a tím pozbývá použití instancí Zend_Db_Table smysl. V tomto případě Po nabytých zkušenostech s touto komponentou bych v dalších projektech volil alternativní řešení kompatibilní se Zend Frameworkem – například PHP Doctrine, což je často doporučovaná ORM databázová komponenta.by bylo vhodné se předem vyvarovat použití této komponenty a nahradit ji jinou ORM databázovou komponentu kompatibilní se ZF, jakou je například PHP Doctrine. 4.2.1.8 Zend_Form Komponenta pro jednoduchou tvorbu formulářů obsahuje veškerou funkcionalitu, kterou bychom očekávali. Důležitou součástí je Zend_Form_Element, součást reprezentující samotné prvky formuláře. Zend_Form_Element komponenta plně využívá možností Zend_Validator pro validaci uživatelského vstupu a Zend_Filter pro jeho filtrování. 4.2.1.9 Zend_Layout Singleton komponenta zajišťující rozvržení a zobrazení vizuální reprezentace uživateli. Většinou využívá specifické šablony. Přímo spolupracující je součást je Zend_View , která se stará o zobrazení dat v rámci layoutu. 4.2.1.10 Zend_Loader 26 Opět se jedná o novou singleton komponentu představenou v ZF 1.8. Zend_Loader pomocí metody ::autoload zajišťuje automatické načítání tříd potřebných v rámci aplikace. V zásadě využívá jména třídy k jejímu načtení v rámci PHP include_path(). Například pro načtení třídy PL_Acl, při správně nastavené include_path() do „/library“ složky, bude třídu hledat v adresáři „/library/PL/Acl.php“. Jak je vidět v tomto jednoduchém schématu, oddělují podtržítka v názvu třídy jednotlivé adresáře. Využití tohoto jednoduchého principu v rámci celého systému značně usnadní práci, neboť nemusíme dále dávat pozor, které soubory jsme zapomněli použít pomocí PHP funkce require_once() případně include_once(). 4.2.1.11 Zend_Locale Primární třída pro lokalizaci aplikace. Samotná třída nemá příliš mnoho využití, ale tvoří podporu pro další závislé komponenty, jakými jsou například Zend_Translate, Zend_Date a jiné. 4.2.1.12 Zend_Log Zend_Log nabízí možnost logování informací o stavu systému pomocí standardních kódů pocházejících z BSD syslog protokolu popsaného v RFC-3164. Těmito kódy jsou „Emerg“, „Alert“, „Warn“, „Notice“, „Info“ a „Debug“. Zend_Log nabízí množství možných výstupů, počínaje výstupem na PHP příkazovou řádku, přes zápis do souboru nebo databáze až po výstup do populárního rozšíření Firebug pro prohlížeč Mozilla Firefox. Logování událostí je velmi důležité především při vývoji aplikace, ale je také vhodné pro následné monitorování chodu. V závislosti na zvoleném režimu chodu aplikace můžeme definovat úroveň logování (stupnice 0-7). 4.2.1.13 Zend_Navigation Nová komponenta představená v ZF 1.8 určená pro tvorbu menu a jiných navigačních prvků. Pro uchování hierarchické struktury menu se nabízí spolupráce s Zend_Config a načítáním menu z *.ini nebo *.xml souborů. 4.2.1.14 Zend_Registry Zend_Registry je singleton kontejner určený pro ukládání hodnot a objektů v rámci celé aplikace. Nahrazuje a vylepšuje tak funkci PHP global proměnných. 4.2.1.15 Zend_Translate Klíčová součást pro tvorbu vícejazyčné aplikace. Zajišťuje překlady jednotlivých částí systému na základě „slovníků“. Jako slovník můžou sloužit CSV, INI, TBX, TMX a jiné soubory. 4.2.2 Obsluha požadavku v Zend Frameworku 27 Formatted: Font: Bold Formatted: Font: Bold Veškeré požadavky pro ZF jsou směrovány pomocí .htaccess modulu Apache web serveru na soubor index.php, který je výchozím pro celou aplikaci. Odtud je vyřizování požadavku obstaráno Zend Frameworkem. Jak je vidět na následujícím obrázku ilustrujícím posloupnost vyřizování, je požadavek předán Front Controlleru. Na základě požadavku je inicializován router, který určí kam požadavek směrovat. Následně jsou spuštěny procedury před vyhodnocením požadavku (dispatchLoopStartup, preDispatch), poté je vytvořena instance adekvátního controlleru, který požadavek odbaví. Poté Nakonec jsou spuštěny poodbavovací procedury (postDispatch, dispatchLoopShutdown) a výsledek je vrácen prohlížeči. 28 Formatted: Czech Obrázek 3: Schéma vyřízení požadavku v Zend Frameworku [7] 29 4.3 Implementace (programátorská příručka) Systém byl implementován na základě doporučení pro tvorbu Zend Framework aplikací. Popis implementace slouží rovněž jako programátorská příručka. Pro detailnější pohled na strukturu aplikace a probíhající procesy je na přiloženém CD dokumentace kódu generovaná pomocí PHP Documentor. 4.3.1 Adresářová struktura Adresářová struktura vychází z doporučené adresářové struktury pro modulární projekty v Zend Frameworku, pouze s lehkými modifikacemi pro společné součásti aplikace. /application o /config o /lang o /layouts o /modules /default o /config o /controllers o /forms o /lang o /models o /views /scripts o /_partials o /admin o /error o /index <další moduly – vynecháno pro lepší čitelnost> /bin /library o /PL 4.3.1.1 Kořenové složky o /Zend /application – obsahuje vlastní aplikaci a její data /log /bin – binární soubory Zend Tool /public /library – obsahuje knihovny pro naši aplikaci /log – adresář pro ukládání systémových souborů /public – jediná veřejně přístupná složka, obsahuje index.php a další zdroje, které musí být nutně přímo přístupné pro prohlížeč/uživatele /tmp – obsahuje dočasné soubory, například soubory Zend_Cache 4.3.1.2 Application 30 Složka „application“ obsahuje vlastní aplikaci. /config – obsahuje konfigurační soubory společné pro celou aplikaci /lang – obsahuje společné jazykové soubory /layouts – obsahuje XHTML předlohové šablonové soubory, které budou složit pro zobrazení dat ve kterých bude zobrazována moje aplikace /modules – obsahuje jednotlivé moduly aplikace 4.3.1.3 Modules Složka s moduly naší aplikace /config – obsahuje konfigurační soubory daného modulu /controllers – obsahuje kontrolery modulu /forms – obsahuje třídy reprezentující jednotlivé formuláře pro daný modul /lang – jazykové soubory modulu /models – třídy reprezentující modely aplikace /views – zobrazovací skripty a „helpery“ aplikace 4.3.1.4 Library V „library“ se nachází knihovny využívané v aplikaci. Zejména je to domovský adresář Zend Frameworku (adresář „/Zend“ ). Dále obsahuje složku s vlastními knihovnami, povětšinou rozšiřujícími knihovny Zend Frameworku (adresář „/PL“). Formatted: Font: Bold Formatted: Font: Bold 4.3.2 Systém Kompletně celý systém je implementován objektově, jednotlivé objekty jsou sdružovány v logických strukturách daných výše zmíněným adresářovým systémem. V základním nastavení (nevyžaduje-li modul jinak) překládá systém URL podle následujícího schématu: Prezentační část – http://adresa.kde/:jazyk:/:modul:/:controller:/:akce:/:parametr1:/:hodnota1:/ Administrační část http://adresa.kde/:jazyk:/:controller=admin:/:modul:/:akce:/:parametr1:/:ho dnota1:/ touto jednoduchou změnou v URL získáme přehlednější adresy pro administraci 4.3.2.1 MVC architektura Systém dodržuje zásady MVC (model-view-controller) architektury – jednotlivé části aplikace jsou jasně rozděleny do skupin model (modely), view (zobrazení) a controller (kontrolery). 31 Formatted: Heading 4 Modely aplikace jsou umístěny v stejně pojmenovaných adresářích každého daného modulu – models, views, controllers. Více o jednotlivých částech MVC architektury aplikace je možno získat v kapitole „4.3.43 Moduly“. Každá z těchto částí zajišťuje dané funkce. Formatted: Czech Formatted: Normal 4.3.2.2 Systémový router Systém využívá routeru pro překlad jednotlivých částí adresy na jednotlivé akce. Tímto lze docílit v rámci aplikace „hezkých“ url, která jsou velmi dobře čitelná jak pro člověka, tak například pro roboty poskytovatelů vyhledávání na internetu. Formatted: Font: 12 pt, No underline, Font color: Auto, Czech Formatted: Czech Zároveň přináší v rámci aplikace určitou strukturu a s tím i přehlednost. V základním nastavení (nevyžaduje-li modul jinak) překládá systém URL podle následujícího schématu: Prezentační část – http://adresa.kde/:jazyk:/:modul:/:controller:/:akce:/:parametr1:/:hodnota1:/ Administrační část http://adresa.kde/:jazyk:/:controller=admin:/:modul:/:akce:/:parametr1:/:ho dnota1:/ touto jednoduchou změnou v URL získáme přehlednější adresy pro administraci Tyto volby je však samozřejmě možné pozměnit pro každý modul v rámci jeho bootstrap třídy, tak aby vyhovovaly jeho potřebám. 4.3.3 Jádro systému Jádrem systému jsou především inicializační funkce společné pro všechny moduly. Je tvořeno následujícími soubory: /public/index.php – index.php slouží pouze k definici systémových konstant, include_path() a konečně spuštění samotnéhomu bootstrapu aplikace. /application/config/application.ini – jedná se o konfigurační soubor pro bBootstrap aplikace. Obsahuje základní konfiguraci pro PHP, include_path(), adresáře s moduly, FronControlleru a výchozích přístupových údajů k databázi. /application/Bootstrap.php – třída, která obsahuje inicializační metody funkce pro celou aplikaci. V rámci Bootstrapu se inicializuje následující: o Zend_Loader – pro automatické načítání tříd o Zend_Config – načtení konfiguračních XML souborů o Zend_Log – logování systémových událostí 32 Formatted: Font: Bold o Zend_Controller _Router – router pro nastavení základního schéma URL aplikace a jeho mapování na controllery a akce pro veřejné a administrační stránky o Zend_View – nastavení zobrazení aplikace, inicializace View Helpers o Moduly – inicializace modulů aplikace a jejich zdrojů, u kterých je potřeba přístup i z jiných modulů. o Plug-iny pro Zend_Controller_Front – jedná se o rozšíření předcházející odbavení akce (viz. Obrázek 3: Schéma vyřízení požadavku v Zend Frameworku [7]Obrázek 4: Schéma vyřízení požadavku v Zend Frameworku [7]). Jedná se oProbíhá incializaci incializace lokalizace a překladu aplikace a ověření uživatele a jeho přístupových práv v případě, že přistupuje do části vyžadující přihlášení. 4.3.4 Moduly Moduly obsahují již samotné modely, controllery a view helpery nutné pro chod aplikace. V případě potřeby je možné rozšířit Bootstrap aplikace pro daný modul – v tomto případě vytvoříme soubor „Bootstrap.php“ v kořenovém adresáři modulu. Soubor bude obsahovat jedinou třídu a to „Nazevmodulu_Bootstrap“ rozšiřujícího (extends) „Zend_Application_Module_Bootstrap“. Toho můžeme využít například pro rozšíření routování specificky pro daný modul. 4.3.4.1 Controllers Základem modulů jsou tedy controllery uložené ve složce „/controllers“. Pro správnou funkci je nutné, aby soubor s controllerem měl název ve tvaru „NazevController.php“. Třída controlleru má poté název „Modul_NazevController“ a musí bezpodmínečně rozšiřovat (extends) instanci „Zend_Controller_Action“. Akce jednotlivých controllerů jsou poté veřejné metody, jejichž název musí být ve tvaru nazevAction(). Praktický příklad: Controller pro URL „http://adresa.kde/en/mujmodul/mujcontroller/mojeakce“ bude uložen ve složce „/application/modules/mujmodul/controllers/mujcontroller“ a bude obsahovat třídu „Mujmodul_MujcontrollerController“ a metodu „mojeakceAction()“. 4.3.4.2 Views Views neboli zobrazení jsou vždy přiřazena danému controlleru a akci a jsou uložena ve složce /scripts. Jednotlivé podsložky poté názvy odpovídají názvu controlleru. Soubory obsažené v těchto složkách poté názvy odpovídají jednotlivým akcím. Standardní přípona zobrazovacích skriptů je *.phtml. 33 Součástí views sou tzv „view helpers“ automatizující určité zobrazovací činnosti. Samotný ZF obsahuje množství helperů, například pro tvorbu obsahu stránky, pro tvorbu menu, atd. Aplikace obsahuje implementované vlastní helpery pro automatizování některých zobrazovacích funkcí a především pro vytvoření stránky obsahující položky z různých modulů (například zobrazení menu pro přepnutí jazyku aplikace). Praktický příklad: zobrazovací skript pro modul „mujmodul“, controller „mujcontroller“ a akci „mojeakce“ bude uložen v souboru „/application/modules/mujmodul/views/scripts/mujcontroller/mojeakce.phtml“. 4.3.4.3 Models Modely slouží pro reprezentaci dat, například z databáze. Standardně jsou umístěny ve složce „models“ v rámci každého modulu. Pro využití autoloaderu by mělo být pojmenování souboru s třídou shodné s názvem modelu, tj. například „MujModel.php“ a třída by měla mít jméno „Nazevmodulu_Model_MujModel“. Součástí modelu je také model mapper – tj. třída, která zajišťuje získání dat (namapování) pro daný model z konkrétního datového úložiště. Další částí je samotná reprezentace datového úložiště, v mém případě databázové tabulky. Ta je v rámci Zend aplikace reprezentována třídou v podadresáři „/DbTables/“ a rozšiřuje instanci Zend_Db_Table. Pozor: všimněte si, že i přesto, že složka s modely využívá množné číslo „models“, je v názvu třídy modelu číslo jednotné „Model“. 4.3.4.4 Forms Pojmenování formulářů, jak třídy tak souboru se řídí stejným principem jako u modelů. Jediným rozdílem je, že třída formulářů musí rozšiřovat (extends) třídu Zend_Form. 4.3.5 Implementace modulů 4.3.5.1 Home (Domů) Základní modul. 4.3.5.1.1 Administrace Umožňuje změnu globálního nastavení aplikace. Modul spolupracuje s hlavním konfiguračním souborem aplikace, který je uložen v „/application/config/config.xml“. Konfigurační soubor je načten do instance Zend_Config, kde je upraven a následně zpětně uložen do souboru. 34 Nastavení aplikace je uloženo formou XML/INI souborů, pro jejichž čtení slouží komponenta Zend_Config. Po načtení proběhnou modifikace zvolené uživatelem a nastavení je znovu uloženo do souboru pomocí Zend_Config_Writer. 4.3.5.1.2 Prezentace V prezentační vrstvě nemá modul žádnou funkci. 4.3.5.2 Authorization (Oprávnění) Modu l pro správu oprávnění a identit (jejich přihlašování, odhlašování). 4.3.5.2.1 Administrace Umožňuje přidělování/odebírání oprávnění z rolí, přidávání a odebírání rolí. Jako datové úložiště slouží v tomto případě databáze, reprezentovaná příslušnými modely. Databáze je tvořena celkem 3mi tabulkami pro uživatelská oprávnění a jednou tabulkou pro uživatelské skupiny.. „acl_resources“ obsahuje zdroje – v tomto případě se jedná o dvojice „modul_controller“. V případě, že uživatel nemá přístup ke zdroji, je mu odmítnut přístup k celé škále daného controlleru daného modulu. Formatted: Font: 12 pt, No underline, Font color: Auto „acl_privileges“ obsahuje oprávnění pro jednotlivé zdroje. Oprávnění reprezentují akce (action) jednotlivých controllerů. V případě, že je uživateli povoleno přistupovat ke controlleru, je dále ověřen jeho přístup k danému privilegiu (akci). Formatted: Font: 12 pt, No underline, Font color: Auto „acl_roles_privileges“ mapuje jednotlivá oprávnění a příslušné uživateleuživatelské role. Formatted: Font: 12 pt, No underline, Font color: Auto „acl_roles“ obsahuje uživatelské role. 4.3.5.2.2 Prezentace Zajišťuje přihlašování a odhlašování uživatele. Aplikace zároveň vytváří objekty typu Zend_Acl, který se stará o ověřování uživatelských pravomocí. Pomocí Zend_Acl pluginu pro Zend_Controller_Front je pak tvořena vrstva pro ověřování uživatelských oprávnění při přístupu k jednotlivým modulům, kontrolerům a akcím. 4.3.5.3 Navigation (Navigace) Navigační modul slouží pro tvorbu hlavního navigačního menu aplikace. 4.3.5.3.1 Administrace Přidávání/odebírání jednotlivých položek do menu. 35 Vzhledem k požadavku na vysoce modulární aplikaci, musí být navigační systém schopen obsahovat odkazy na různé moduly a jejich akce. Zároveň musí být schopen zobrazit víceúrovňové menu. Pro vytvoření navigačního menu a je využito komponenty Zend_Navigation. Vzhledem k podpoře konfiguračních souborů je jako datové úložiště zvolen INI konfigurační soubor, umožňující jednoduší správu hierarchické struktury, než klasická databázová tabulka. Systém využívá jeden konfigurační soubor pro každý jeden jazyk. Pro načtení dat ze souboru je stejně jako u administrace nastavení využíván Zend_Config, pro zápis po modifikaci poté Zend_Config_Writer. Aby bylo možné modul přidat do administrace, je nutné aby obsahoval view helper, pro zobrazení formuláře se specifickými parametry pro své zobrazení – modul, controller, action, route a případně další parametr pro konkrétní výběr zobrazované položky. 4.3.5.3.2 Prezentace Prezentace je tvořena stromovým menu (unordered list <ul>), který je pomocí stylu lehce upravitelné například na DHTML pop-down menu. 4.3.5.4 Langs (Jazyky) Modul pro správu dostupných jazyků v rámci aplikace. 4.3.5.4.1 Administrace Umožňuje přidávat, odstraňovat a deaktivovat (jazyk zůstane přítomen, pouze nebude pro uživatele přístupný) jednotlivé jazyky. 4.3.5.4.2 Prezentace Zobrazení menu pro přepnutí jazyku pomocí view helperu. 4.3.5.5 Pages (Stránky) Modul pro prezentaci obsahových stránek. 4.3.5.5.1 Administrace Umožňuje vytvářet jednotlivé stránky a spravovat jejich jednotlivé jazykové verze. Data jsou opět uložena v databázi, reprezentována modely. Reprezentována je 2mi tabulkami: „pages“ – jedná se o kontejnery seskupující jednotlivé jazykové variace. Formatted: Font: 12 pt, No underline, Font color: Auto „pages_lang“ – samotné jazykové mutace obsahující veškeré informace stránky. Identifikované stránkou a jazykem. Formatted: Font: 12 pt, No underline, Font color: Auto 36 Modul pro tvorbu stránek musí uživateli umožnit zadávání dat v zobrazení, které reprezentuje výslednou podobu (WYSIWYG) – pro toto bylo zvoleno rozšíření TinyMCE [8], které nabízí jednoduchou integraci do stávajícího kódu a zároveň poskytuje nadstandardní množství funkcí v případě budoucího rozšíření. 4.3.5.6 Users (Uživatelé) Modul pro správu uživatelů. 4.3.5.6.1 Administrace Možnostmi je opět vytvoření, editace a případná deaktivace jednotlivých uživatelů systému. Uživatelům jsou také přiřazovány jednotlivé role, na základě kterých mohou provádět interakci se systémem. Data jsou uložena v jedné tabulce „users“. 4.3.5.6.2 Prezentace Zobrazení autora a přihlášeného uživatele. 4.3.6 Lokalizace systému Lokalizace systému je realizována pomocí překladů, nacházejících se v CSV souborech. CSV soubory jsou lehce čitelné pro člověka a tak není problém provést překlad do potřebné verze. Momentálně systém obsahuje anglickou verzi. Je vždy nutné provést překlad všech lokalizačních souborů. 37 38 4.3.7 Prezentační rozhraní a jeho úprava Tvořeno (X)HTML šablonami uloženými v souborech s příponou *.phtml. Pro zobrazení dynamicky generovaných dat využívá systém Zend_View elementů. Základní rozvržení stránky (layouty) jsou tvořeny šablonami uloženými v adresáři „/application/layouts/scripts/“. Systém je aktuálně tvořen 3mi základními šablonami a to „admin.phtml“ (šablona administračního rozhraní), „layout.phtml“ (šablona prezentačního rozhraní) a konečně „login.phtml“ (šablona obrazovky pro přihlášení). V šablonách je využito Zend_View a Zend_View_Helper objektů pro generaci dynamického obsahu každé stránky. Tyto se nachází vždy v dané složce každého modulu ve složkách „/nazev_modulu/views/“. Zde jsou ve složce „scripts“ uloženy šablony pro jednotlivé controllery a jejich akce. Ve složce „helpers“ jsou uloženy View Helper objekty, které slouží pouze k zobrazení daných dat nikoliv však k provádění akcí. Toho je možné využít například pro volání zobrazení dat jednoho modulu z druhého. 5 Testování Testování je nedílnou součástí vývoje každé aplikace. Umožňuje nám zjistit skryté neduhy aplikace, zamezit vzniku chyb způsobených uživatelem, v neposlední řadě je u webové aplikace také validace vzniklého XHTML a CSS kódu. Především u firemní prezentace je tato část velmi důležitá, vzhledem k tomu, že zajišťuje lepší pozice v internetových vyhledávačích. Aplikace nemusí pouze dodržovat standardy, ale musí být také kompatibilní se všemi významnými internetovými prohlížeči a jejich interpretací kódu. 5.1 Validita prezentačního kódu Aplikace ve své současné verzi pro demonstraci funkčnosti využívá šablony vzhledu přejatého z mých osobních stránek. V praktickém nasazení se počítá s úpravami vždy dle konkrétních požadavků dané firmy. 5.1.1 XHTML V současné době existuje více standardů, ve kterých je možné prezentační vrstvu tvořit. Pro mnou tvořenou prezentaci volím jazyk XHTML, který je odvozen od jazyka HTML. Jako konkrétní verzi volím XHTML 1.0 Strict, která je nejpřísnější variantou, co se týká(X)HTML tagů a oddělení obsahové a stylové vrstvy. Pro validaci XHTML byl vyučit validátor W3C [9], který sám určí typ stránek na základě DOCTYPE dokumentu. 39 Formatted: Font: 12 pt, No underline, Font color: Auto Formatted: Font: 12 pt, No underline, Font color: Auto Formatted: Font: 12 pt, No underline, Font color: Auto Formatted: Font: 12 pt, No underline, Font color: Auto Po krátkém odladění se mi podařilo vytvořit validní prezentaci. 5.1.2 CSS Pro validaci CSS byla použita podobná metodika jako pro validaci XHTML kódu. Z dostupných internetových validátorů CSS kódu byl opět zvolen CSS validator od W3C [10]. Validátor kontroluje správnost užití jednotlivých elementů a použitých vlastností. CSS kód se prokázal jako zcela validní. 5.2 Testování použitelnosti Testování použitelnosti je metodou pro získání podnětů z užívání aplikace od koncových uživatelů. Je důležitou částí vývoje aplikace, sloužící k odhalení případných chyb v programu, ale především k získání názorů na rozhraní aplikace, její strukturu, atd... Pro vyhodnocení použitelnosti aplikace jsem zvolil několik dobrovolníků z řad mých známých a kamarádů, v různém věkovém rozpětí a různými zkušenostmi s prací s počítačem, kterým byl přiřazen účet administrátora systému. Podněty k struktuře a logičnosti navigace v rámci aplikace byly vyhodnoceny a aplikace přizpůsobena. Pro všechny uživatele byl vyhotoven seznam úkolů k provedení v aplikaci a jejich výsledky zapsány do příslušného dotazníku. Uživatelům byla také přenechána volnost k vyzkoušení vlastních nápadů a podrobnějšímu prozkoumání aplikace. Podněty k struktuře, logičnosti navigace v rámci aplikace a aplikaci jako celku byly vyhodnoceny a aplikace dodatečně přizpůsobena. Prázdný testovací formulář a vyplněné dotazníky jsou na přiloženém CD v adresáři „\usability_testing\“. 5.3 Kompatibilita prohlížečů Cílem vývoje aplikace by mělo být, kromě samozřejmého dodržování standardů, vytvořit aplikaci kompatibilní s majoritními internetovými prohlížeči. Bohužel ne všechny internetové prohlížeče interpretují obsah stejně a tak je nutné zobrazení částečně přizpůsobit právě pro daný prohlížeč. V tomto ohledu bývá největším problém prohlížeč Internet Explorer ve verzi 6 a starší. Bohužel ani novější verze nejsou leckdy bezproblémové. Aplikace byla testována na následující systémových konfiguracích: 1) Sestava 1: OS: Miscrosoft Windows Vista Business 32-bit SP1 40 Formatted: Font: Bold Rozlišení: 1680 x 1050, 32-bit barevná hloubka Internetové prohlížeče: MS Internet Explorer 7 Mozilla Firefox 3.0.8 Opera 9.63 Google Chrome 2.0.172.30 2) Sestava 2: OS: Microsoft Windows 7 RC1 Rozlišení: 1920 x 1080, 32-bitová barevná hloubka Internetové prohlížeče: MS Internet Explorer 8 Mozilla Firefox 3.5.6 Opera 10.06 Google Chrome 4.0.249.30 3) Sestava 3: OS: Microsoft Windows XP SP1 (v prostředí Virtual PC) Rozlišení: 1280 x 800, 32-bitová barevná hloubka Internetové prohlížeče: MS Internet Explorer 6 Testované rozlišení bylo v rámci testování vždy také přizpůsobeno nižšímu rozlišení (tj. 1024 x 768). Na všech výše jmenovaných systémech a internetových prohlížečích se aplikace jevila jako zcela funkční a bezproblémová. 5.4 Akceptační test Pro ověření kompletnosti celého projektu v současné fázi vývoje je nutné provést akceptační test s následujícími případy: Formatted: No underline, Font color: Auto, Czech Formatted: Czech Formatted: Heading 2, Indent: Left: 0 cm Formatted: No underline, Font color: Auto, Czech Administrátorské účty: Přihlášení/odhlášení do administračního rozhraní Formatted: Font: Bold, No underline, Font color: Auto Vyzkoušení změny nastavení aplikace Formatted: Font: Bold Vyzkoušení administrace jednotlivých modulů o Uživatelé – přidání/editace/smazání uživatele, otestování odeslání registračního emailu s heslem o Oprávnění – nastavení práv uživatelských skupin o Jazyky – přidání/editace/smazání jazyku dostupného v aplikaci o Navigace – přidání/editace/smazání položek v menu Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,74 cm + Indent at: 1,38 cm 41 Formatted: List Paragraph, Bulleted + Level: 2 + Aligned at: 2,01 cm + Indent at: 2,65 cm o Stránky – přidání/editace/smazání stránky, WYSIWYG editor Uživatelé: Formatted: Font: Bold, No underline, Font color: Auto Vyzkoušení prezentační části Vyzkoušení detekce jazyka dle prohlížeče Vyzkoušení manuální změny jazyka Ověřit, že nelze přistupovat k administračním úkonům S využitím Zend Frameworku je možné napsat a provést PHPUnit testování, které je časově náročnější a také jsem jej v současné fázi vývoje aplikace nepovažoval za podstatné. Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,63 cm + Indent at: 1,27 cm Formatted: Indent: Left: 0 cm Veškeré testování aplikace bylo tedy prováděno ručně, dokud jednotlivé části nevykazovaly chyby. Serverová část projektu byla testována soustavně během vývoje. K testování byly použity debugovací nástroje Zend Frameworku, tj. Zend_Log a Zend_debug pro monitorování stavu aplikace a Zend_Db_Profiler pro sledování dotazů a jejich počtu na databázi. Jako výstup bylo využito rozšíření FireBug pro prohlížeč Mozilla Firefox. Data pro FireBug jsou zasílána pomocí HTTP hlaviček, aby bylo zajištěno, že obsah stránky nebude narušen. V produkčním režimu aplikace je jako výstup využíván zápis do log souborů. 5.4 Formatted: Normal Serverová část 42 43 6 Závěr Cílem práce bylo zhodnotit současné redakční systémy a navrhnout a implementovat generické alternativní řešení., zaměřené především na firemní klientelu.Zaměření celé práce bylo nastaveno především z pohledu firemní klientely a z toho vyplývajících požadavků V teoretické části jsem se zaměřil na analýzu několik populárních, jak volně dostupných, tak komerčních redakčních systému. Na základě poznatků o těchto systémech jsem vypracoval jejich srovnání a zhodnotil jejich výhody a nevýhody. Tohoto zhodnocení a především poznatků z těchto CMS, jsem se snažil využít pro návrh vlastního řešení redakčního systému. využil pro návrh vlastního řešení redakčního systému, ve kterém jsem se snažil zohlednit nedostatky těchto CMS. Při návrhu jsem se soustředil především na jednoduchou strukturu aplikace, která by značně ulehčila další vývoj a rozvoj systému. Součástí práce je také náhled do případného možného dalšího rozvoje systému. Součástí návrhu je také náhled do možného budoucího vývoje. Na základě návrhu byl implementován základ flexibilního redakčního sytému, založeného na Zend Framework. Jsem si vědom toho, že systém není funkcemi schopen momentálně konkurovat volně dostupným CMS, vzhledem k tomu, jak dlouho a jakým počtem vývojářů jsou tyto již vyvíjeny. Přiznám se, že komplexita celého problému a především jeho řešení mě již během analytické části mírně překvapila a tak bohužel ani výsledná implementace neodpovídá mým původním představám. Přesto věřím, že i přes veškeré komplikace a relativně nízkou rozsáhlost především z uživatelského pohledu, by mohl mnou implementovaný základ být vhodný pro další rozšiřování, především díky využití ZF, neboť redakčních systémů založených na tomto (či jiném rozšířeném PHP frameworku) není mnoho. Systém využívá standardů a doporučení pro vývoj aplikací v ZF a s přiloženou dokumentací by tedy měl být snadno pochopitelný pro každého s alespoň základní znalostí uvedeného frameworku. Důraz byl kladen především na modularitu systému a jednoduchost případných úprav pro využití v co nejširším spektru firem, majících různé nároky a požadavky. Velmi důležitým aspektem byla také schopnost systému podporovat vícejazyčnou prezentaci a celkovou internacionalizaci. V implementační 44 Formatted: Line spacing: 1,5 lines části práce se také zabývám popisem možností výše zmíněného frameworku a jeho využití v komerční sféře. Úplným závěrem bych asi podotkl, že implementace vlastního redakčního systému v rámci relativně krátkého tématu není úplně vhodná, neboť je to zadání pro jednoho člověka značně rozsáhlé a bylo by vhodné spíše pro dlouhodobější týmový vývoj odpovídající na narůstající nové a měnící se požadavky uživatelů. Tomuto zadání nepřispívá ani současná nabídka open-source redakčních systémů, které jsou na velmi vysoké úrovni a jejichž úprava by byla s největší pravděpodobností méně náročnou alternativou ve všech uvedených aspektech. Již zavdené systémy mají navíc výhodu rozsáhlé uživatelské podpory a většího vývojového týmu (případně i samotných uživatelů), který na postupném zdokonalování systému pracuje ve většině případů již několik let. 45 46 A. Literatura 1. opensourceCMS – testování volně šiřitelných redakčních systém http://www.opensourcecms.com/ 2. The CMS Matrix – srovnání volně šiřitelných redakčních systémů http://www.cmsmatrix.org/ 3. Wikipedia – SQL Injection http://cs.wikipedia.org/wiki/SQL_injection 4. Zend Framework – Case Studies – komerční nasazení frameworku http://framework.zend.com/about/casestudies 5. Wikipedia – Zend Framework – základní informace o Zend Frameworku http://en.wikipedia.org/wiki/Zend_Framework 6. Zend Framework – programátorská referenční příručka http://framework.zend.com/manual/en/ 7. KITpages – se svolením autora použita flow-chart obsluhy požadavku v ZF http://www.kitpages.fr/ 8. TinyMCE - Javascript WYSIWYG Editor http://tinymce.moxiecode.com/ 9. W3C – (X)HTML validátor http://validator.w3.org/ 10. W3C – CSS validátor http://jigsaw.w3.org/css-validator/ 1 Formatted: Default Paragraph Font, English (U.S.) Formatted: Default Paragraph Font, English (U.S.) Formatted: Default Paragraph Font, English (U.S.) Formatted: Default Paragraph Font, English (U.S.) Formatted: Default Paragraph Font, English (U.S.) Formatted: Font: 12 pt, Not Bold, No underline, Font color: Auto, Czech Formatted: Default Paragraph Font, English (U.S.) Formatted: Default Paragraph Font, English (U.S.) Formatted: Default Paragraph Font, English (U.S.) Formatted: Default Paragraph Font, English (U.S.) Formatted: Default Paragraph Font, English (U.S.) 2 B. Seznam použitých zkratek CMS MVC PHP SQL XHTML WYSIWYG editor URL rewrite / mod rewrite ZF ORM UAC W3C Content Management Systém Systém pro správu obsahu / redakční systém Model-View-Controller Hypertext Pre-procesor Structured Query Language Extensible HyperText Markup Language What-you-see-is-what-you-get editor Editor, kde vidíme výsledek, jak bude zobrazen v prohlížeči po úpravě Umožňuje využití snadno čitelných URL Zend Framework Object-Relational mapping User Account Control Systém ochrany systému Windows Vista a novější World Wide Web consortium 3 4 C. Uživatelská příručka a. Instalační příručka (pro MS Windows) i. Hostingové služby Při využití CMS, jak jsem psal, se počítá především s využitím běžně dostupných webhostingových služeb. Pro nasazení na hostingu providera je nutné, aby tento splňoval některé základní požadavky: PHP verze 5.2.4 a vyšší Podpora Apache Mod_Rewrite Databáze MySQL Formatted: List Paragraph, Bulleted + Level: 1 + Aligned at: 0,63 cm + Indent at: 1,27 cm V případě, že námi zvolený hosting splňuje výše zmíněné parametry, zkopírujeme systém do námi zvoleného adresáře. Adresář pro doménu nastavíme do adresáře ‚public„ a je-li to nutné, nastavíme povolení přístupu aplikace do nadřazeného adresáře, například za použití funkce ‚open_basedir„. Nepodporuje-li hosting funkci ‚open_basedir„, nastavíme adresář domény do hlavní složky s aplikací a rozbalíme obsah složky ‚public„ do nadřazené. i.ii. Instalace PHP a MySQL s využitím lokálního serveru Chceme-li systém spustit na lokálním PC, například z důvodu testování, úprav atd., je nutné nainstalovat Apache webserver, PHP a MySQL databázi. Pro ulehčení práce doporučuji některý z jednoduchých instalačních balíčků, jako je například XAMPP (případně jeho LITE verze), který obsahuje distribuce právě výše zmíněných aplikací v jednom balíčku s jednoduchou instalací. Pro provoz systému a jeho jednoduchou instalaci jsem zvolil XAMPP(LITE), který obsahuje distribuci web serveru Apache, PHP a databáze MySQL. Instalátor je uložen na přiloženém CD v adresáři „/install/xampplite“ případně „/install/xampp/“. Nachází se zde jak samoinstalační verze, tak verze kterou stačí rozbalit do libovolného adresáře na disku. XAMPP je přiložen ve 2 verzích a to FULL a LITE. Verze LITE se liší od FULL absencí některých součástí, například FileZilla FTP serveru, OpenSSL, Mercury Mail Transport Systém, atd. Pro moje využití se tedy nejedná o důležité funkce. Pozor: V případě Windows Vista nebo Windows 7 a zapnutém UAC se vzhledem k ochraně systému a tím spojeném omezení plnohodnotného přístupu do složky „Program Files“ doporučuje instalace/rozbalení do jiné lokace, například C:\. 5 XAMPP – instalace: instalace je velmi jednoduchá, stačí zvolit adresář pro instalaci a potvrdit. XAMPP – rozbalení: v případě, že nebyla provedena instalace do adresáře „C:\XAMPP“ nebo „C:\XAMPPLITE“, je nutné spustit „setup-xampp.bat” obsažený v adresáři, který zaktualizuje cesty v konfiguračních souborech. Spuštěním „xampp-control.exe“ získáme jednoduchou aplikaci, která nám umožňuje zapnout/vypnout/restartovat MySQL a Apache a přistupovat do administrace. Posledním krokem pro spuštění redakčního systému je nastavení cesty v souboru „/xampp/apache/conf/httpd.conf“. Zde najdeme klíč „DocumentRoot“ a změníme jej ho na ‚DocumentRoot „Disk:\cesta\k\cms\public“„. Pro testovací účely na lokálním PC je tato konfigurace dostatečná. Tím je konfigurace serveru dokončena. ii.iii. Instalace CMS 1) Vytvoření databáze 2) Vytvoření struktury databáze – pro vytvoření databáze využijeme SQL skript uložený na přiloženém CD v adresáři „/install/database.sql“. Tento skript spustíme v PHPMyAdmin. 3) Nastavení přístupu k databázi - otevřeme k editaci soubor „/adresar-scms/application/config.ini. V souboru nastavíme následující hodnoty: resources.db.params.host = "adresa-sql-serveru" většinou a v případě lokální instalace SQL serveru se jedná o „localhost“ resources.db.params.username = "uzivatelske-jmeno" uživatelské jméno pro přístup k databázi – výchozí nastavení MySQL je „root“ resources.db.params.password = "heslo" přístupové heslo pro přístup k databázi – výchozí nastavení MySQL je bez hesla resources.db.params.dbname = "nazev-databaze" jméno databáze, kterou má CMS využívat b. Administrační příručka 6 Formatted: No underline, Font color: Auto, Czech Přístup do administračního rozhraní je možný pod adresou „http://nazev.kde/jazyk/login“. Z bezpečnostních důvodů není zobrazen přímý odkaz pro vstup do administrace. Administrátorské rozhraní je tvořeno s důrazem na jednoduchost. Rozvržení administračního rozhraní je možné vidět na následujícím obrázku: Formatted: Czech Obrázek 4: Rozložení administračního rozhraní V hlavním menu se zobrazují jednotlivé moduly, které nabízí možnost administrace. Po výběru modulu dojde k zobrazení primární stránky modulu. V levém sloupci se zobrazuje menu právě vybraného modulu s možnými akcemi. V pravém sloupci je prostor pro jednoduchou nápovědu nebo pomocné položky k právě vybranému modulu nebo akci. V prostředním, největším sloupci je prostor pro hlavní zobrazení právě vybraného modulu a jeho akce. i. Správa modulů Celý systém je řešen modulárně a tak i správa jednotlivých částí systému je dělena dle těchto příslušných modulů. 1. Home (Domů) Výchozí modul, obstarává základní nastavení aplikace. Dostupná nastavení je možné přímo editovat a uložit. 7 2. Authorization (Oprávnění) Modul zajišťující vytváření a úpravu uživatelských rolí. 3. Navigation (Navigace) Modul pro správu navigačního menu zajišťuje vytváření menu na základě jednotlivých modulů. V administračním rozhraní můžeme vybrat jazykovou verzi menu, kterou chceme editovat a přidávat do ní položky z jednotlivých modulů, které tuto možnost nabízejí. 4. Pages (Stránky) Modul umožňuje vytvářet, upravovat a mazat statické stránky a spravovat jejich jazykové verze. 5. Users (Uživatelé) Modul pro správu uživatelů. Možnostmi je opět vytvoření, editace a případná deaktivace jednotlivých uživatelů systému. Uživatelům jsou také přiřazovány jednotlivé role, na základě kterých mohou provádět interakci se systémem. 8 D. Obsah přiloženého CD /install/xampp – obsahuje instalaci XAMPP /install/xampplite – obsahuje instalaci XAMPPLITE /install/database – obsahuje database.sql skript pro vytvoření databáze /cms – obsahuje implementovaný redakční systém /install/xampp – obsahuje instalaci XAMPP /install/xampplite – obsahuje instalaci XAMPPLITE /install/database – obsahuje database.sql skript pro vytvoření databáze /phpdoc – dokumentace kódu aplikace z PHP Documentor /thesis – obsahuje bakalářskou práci ve formátech *.pdf a *.docx /usability_testing – zprávy z usability testování 9 Formatted: Font: Bold Formatted: Font: Bold
Podobné dokumenty
Volitelné předměty
k standardní výbavě absolventů všech vysokých škol. V případě technicky a přírodovědně zaměřených škol jako je VŠCHT se
však předpokládají informatické znalosti rozsáhlejší nebo specializovanější. ...
Kerio Workspace
4.1 Připojení k adresářové službě Microsoft Active Directory
Uživatele lze vytvářet bud’ lokálně, nebo je můžete připojit z adresářové služby.
V administračním rozhraní aplikace Kerio Work...
Manuál verze 4.2.4
Tyto vlastnosti jsou datum vytvoření dokumentu, sekce, ve které se dokument vytvoří, a
možnosti výběru, zda má být dokument aktivní, zda se jedná o novinku nebo zda se má
dokument zobrazovat v menu.
Chybová hlášení
Chyba: Nepovolený kód název SLA ..................................................................... 12
Chyba: Nepovolený kód název metriky ...........................................................