Oficiální zadání práce

Transkript

Oficiální zadání práce
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

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ší. ...

Více

Kerio Workspace

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...

Více

Administrace Google Apps pro firmy

Administrace Google Apps pro firmy Generování tokenu pro Enterprise Mobile Management systémy

Více

Manuál verze 4.2.4

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.

Více

Chybová hlášení

Chybová hlášení Chyba: Nepovolený kód název SLA ..................................................................... 12 Chyba: Nepovolený kód název metriky ...........................................................

Více