VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra technických studií Obor Aplikovaná informatika
S y s t é m p ro s p r á v u i n t e r n e t o v ý c h s t r á n e k e l e k t ro n i c k é h o o b c h o d u bakalářská práce
Autor: Jan Krčál Vedoucí práce: doc. Dr. Ing. Jan Voráček, CSc. Jihlava 2016
Abstrakt Práce se zaměřuje na vývoj webové aplikace pro správu obsahu internetových stránek a obchodu. S tímto tématem souvisí metodiky softwarového vývoje a analýza. Systém je navrhován podle agilního vývoje. Cílem práce je vytvoření CMS a jeho otestování na vývojové a produkční verzi. Při implementaci jsou předvedené některé z využívaných nástrojů. Pro systém je navrženo vlastní uživatelské prostředí, které slouží pro lepší orientaci v systému. Po dokončení implementace se práce zaměřuje na testování a návrhy pro další vývoj.
Klíčová slova Systém pro správu obsahu, programování, softwarové inženýrství, testování, vývojové nástroje
Abstract The work focuses on the development of content management system for commercial web. This application was developed in accordance with agile principles. Initially the stakeholders were identified and related users stories captured. Resultant core part of Content Management System was implemented in Nette Framework, then tested and deployed. This document describes all these stages, discusses implementation details and presents particular functionalities. It also characterizes applied tools and principles, related both to the functional transactions and user interfaces. Finally, practical experience and recommendations for further work are discussed and summarized.
Key words Content management system, programming, software engineering, testing, development tools
Prohlašuji, že předložená bakalářská práce je původní a zpracoval/a jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil/a autorská práva (ve smyslu 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ů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ. Byl/a jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom/a toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutí licence. V Jihlavě dne
............................................... Podpis
Poděkování Na tomto místě bych rád poděkoval svému vedoucímu práce doc. Dr. Ing. Janu Voráčkovi, CSc. za poskytnutí tématu a možnost vytvářet ho pod jeho vedením.
Obsah 1
Úvod ......................................................................................................................... 9
2
Analýza .................................................................................................................. 10 2.1
Metodiky vývoje SW ...................................................................................... 10
2.2
Uživatelé a jejich požadavky .......................................................................... 10
2.3
User stories ..................................................................................................... 12
2.3.1 Notifikace objednávek ................................................................................ 12 2.3.2 Storno objednávky ...................................................................................... 13 2.3.3 Přehled objednávek ..................................................................................... 13 3
4
5
Použité nástroje ..................................................................................................... 14 3.1
Nette Framework ............................................................................................ 14
3.2
NetBeans IDE ................................................................................................. 16
3.3
Linux ............................................................................................................... 17
3.4
Bootstrap ......................................................................................................... 18
3.5
JQuery a pluginy ............................................................................................. 19
Uživatelské rozhraní ............................................................................................. 20 4.1
Vlastnosti UI ................................................................................................... 20
4.2
Přihlášení a layout ........................................................................................... 21
4.3
Tabulky ........................................................................................................... 22
4.4
Systém sloupců ............................................................................................... 23
4.5
Tvorba obsahu................................................................................................. 23
Popis řešeného problému ..................................................................................... 25 5.1
Správcovská část ............................................................................................. 25
5.1.1 Úkoly a verzování ....................................................................................... 25 5.1.2 Menu ........................................................................................................... 26 5.1.3 Články ......................................................................................................... 26 5.1.4 Galerie ......................................................................................................... 27
5.1.5 Moduly ........................................................................................................ 27 5.1.6 Uživatelé ..................................................................................................... 28 5.1.7 Nastavení a měřící kódy ............................................................................. 28 5.1.8 E-shop ......................................................................................................... 28 5.2
Návštěvnická část ........................................................................................... 30
5.2.1 Navigace a navázaný obsah ........................................................................ 30 5.2.2 Články ......................................................................................................... 30 5.2.3 Galerie ......................................................................................................... 31 5.2.4 E-shop ......................................................................................................... 31 5.2.5 Moduly ........................................................................................................ 31 5.2.6 Routování .................................................................................................... 32 5.2.7 Layout ......................................................................................................... 32 6
7
Implementace ........................................................................................................ 33 6.1
Databáze a modely .......................................................................................... 33
6.2
Presentery a šablony ....................................................................................... 34
6.3
Moduly ............................................................................................................ 35
6.4
E-shop ............................................................................................................. 37
6.5
Exporty............................................................................................................ 39
6.6
Menu a obsah .................................................................................................. 40
6.7
Uživatelé ......................................................................................................... 40
Testování ................................................................................................................ 42 7.1
8
Provozní údaje ................................................................................................ 42
Další vývoj CMS.................................................................................................... 44 8.1
Newsletter ....................................................................................................... 44
8.2
Moduly ............................................................................................................ 44
8.3
Interní zprávy .................................................................................................. 45
8.4
Mobilní aplikace ............................................................................................. 45
8.5 9
Importy dat ...................................................................................................... 46
Závěr ...................................................................................................................... 47
Seznam použité literatury ............................................................................................ 48 Seznam obrázků ............................................................................................................ 50 Seznam tabulek ............................................................................................................. 51 Seznam použitých zkratek ........................................................................................... 52 Přílohy ............................................................................................................................ 53 1
Obsah přiloženého CD.......................................................................................... 53
1 Úvod V dnešní době, kdy se internetová síť hojně šíří do celého světa, jsou kladeny stále větší nároky na tvorbu internetových stránek. Proto již nestačí vytvářet statické stránky, u nichž je možnost provádění úprav velmi malá. Právě z těchto důvodů vznikají různé systémy pro správu obsahu internetových stránek. Tyto systémy mění statické stránky na dynamické. Díky tomu již není potřeba, aby každou změnu prováděl programátor, ale může ji udělat i pracovník seznámený se systémem. Takové systémy se nazývají CMS. Tvorba mého vlastního CMS začala ve chvíli, kdy jsem dostal nabídku na vytvoření stránek pro konkrétního zákazníka. Tou dobou jsem již byl seznámený s tím, že pokud se jedná o stránky, kde se předpokládá častá změna obsahu, bude potřeba využít některé z dostupných CMS. Neměl jsem ale dostatek informací pro to, abych mohl převzít některé z volně dostupných CMS, a tak jsem se rozhodl, že půjdu svojí vlastní cestou. To dalo vzniknout první verzi mého systému pro správu obsahu internetových stránek. Jak už to u programátorů bývá, do projektu jsem se pustil s vervou, ale také s minimem zkušeností. Tím pádem se na první verzi mého CMS objevovaly všechny programátorské neduhy i malá komplexnost systému. Potom se objevil projekt, po jehož dokončení jsem věděl, že stávající řešení již není vhodné a nebylo by správné ho dále rozvíjet. Na řadu proto přišlo vytvoření nové verze systému. Spolu se zkušenostmi nabytými ze školních předmětů a mimoškolních projektů, jsem připravil a vytvořil systém, který dává smysl. Čas strávený nad jeho budoucími úpravami tak jistě nebude ztracený.
9
2 Analýza Projektová analýza představuje souhrn dokumentů vytvořených za účelem zhodnocení projektu a požadavků. Analýza upřesňuje funkčnost a zaměření projektu, díky čemuž může být projekt vytvářen efektivněji. Existuje několik vývojových metodik, které se dělí na tradiční a agilní.[14]
2.1 Metodiky vývoje SW Jak již bylo zmíněno, metodiky se dělí na tradiční a agilní. Oba druhy určují postupy tvorby projektu a zajišťují jejich udržitelnost. Pro každý projekt není vhodná každá metodika. Mezi tradiční metodiky patří například vodopádový nebo spirálový model.[14] Agilní metodiky se od tradičních liší v tom, že proměnné ve vedení projektu nejsou pevné, a od těch, které zadá zadavatel, se odvozují ty dodávané vývojářem. Například od nízkého kapitálu a velkých nároků na rychlé zpracování se odvozuje kvalita. Mezi agilní metodiky patří například SCRUM nebo extrémní programování.[8]
2.2 Uživatelé a jejich požadavky Nejdříve je potřeba identifikovat různé druhy uživatelů systému a jejich požadavky na něj. To vývojáři pomáhá při tvorbě. Je důležité mít jasné podklady pro vývoj. Všem zúčastněným stranám to umožňuje pracovat efektivněji a rychleji.[10] Administrátor Administrátor je typ uživatele, který se stará o vývoj a údržbu systému. Jeho prací je reagovat na požadavky a připomínky všech ostatních skupin. Pokud jsou požadavky vhodné ke zpracování, administrátor má za úkol je zrealizovat. Jeho požadavky na systém jsou následující:
Kvalitní a srozumitelný zdrojový kód kvůli snadnějšímu vývoji.
Využívání aktuálních a prověřených nástrojů pro vývoj (aby i po delším časovém úseku mohl nastat progres k novějším technologiím při návratu k projektu).
10
Projektový manažer Tato skupina uživatelů přichází se systémem do přímého kontaktu. Její náplní práce je komunikovat s uživatelem, formulovat požadavky pro vývojáře a zadávat mu práci podle priorit. Pro projektového manažera je nejdůležitější vlastností systému jeho výsledná srozumitelnost. Správně navržené uživatelské rozhraní zredukuje počet dotazů od uživatele a zabrání nevhodnému užívaní. Uživatel Jde o skupinu, která ovládá a využívá systém. Uživatel předává svoje požadavky a vize systému projektovému manažerovi. Také platí celý vývoj projektu a schvaluje navrhované úpravy od tvůrců. Uživatel bude po dokončení vývoje přicházet s aplikací nejvíce do styku. Proto je pro něj důležité, aby byl systém robustně napsaný, rychlý a pohodlný. Uživatelské prostředí musí být pro uživatele srozumitelné a intuitivní. Je vhodné, aby systém dokázal provádět některé úkony bez zásahu člověka, který ho bude zrovna využívat. Zákazník e-shopu Zákazník
e-shopu
nepřichází
se
systémem
vůbec
do
kontaktu,
s největší
pravděpodobností nebude ani tušit, že provozovatel e-shopu disponuje systémem pro jeho správu. To ovšem neznamená, že systém na něj nebude mít dopad, protože rychlost systému přímo ovlivňuje spokojenost zákazníka. Pro každého nakupujícího v internetovém obchodě je důležité, aby jeho správce reagoval co možná nejrychleji. Dnes je již spousta mechanizmů zautomatizovaná a například e-mail s potvrzením objednávky přichází ihned po dokončení objednávky. To ovšem neznamená, že správce o objednávce ví. Tím pádem se stejně čeká, až se správce podívá, jestli nepřišla objednávka. Aplikace ho na tyto důležité úkony bude upozorňovat sama.
11
2.3 User stories Díky využití metodik jsou jasné některé z kroků analýzy a postupů tvorby projektů. Nejvhodnější metodikou při programování vlastního CMS je extrémní programování. Zákazníkovi se dodává základní funkční verze, která se podle jeho postřehů a požadavků dále upravuje na míru. S tím souvisí právě tvorba user stories.[13] Pomocí této techniky lze popsat šablony, nové knihovny nebo business logiku. User story by měla obsahovat název, ze kterého bude jasné, proč se daná věc řeší. Po názvu následují akceptační kritéria, která upřesňují chování. Poslední částí mohou být implementační poznámky.[9]
2.3.1 Notifikace objednávek Jako uživatel aplikace chci být notifikován o každé nové objednávce, abych mohl lépe a rychleji reagovat. Jako klient e-shopu chci, aby provozovatel e-shopu reagoval co nejrychleji na moji objednávku, abych požadované zboží dostal co možná nejrychleji. Akceptační kritéria Uživatel bude notifikován pomocí e-mailu a ikony v horní liště systému. Po otevření notifikace se uživatel dostane na seznam nových objednávek, kde na ně může reagovat. Implementační poznámky
Obrázek 1: Návrh funkčnosti notifikací pro uživatele
12
2.3.2 Storno objednávky Jako uživatel aplikace chci mít možnost stornovat objednávku, pokud k tomu dostanu pokyn od zákazníka nebo pokud je objednávka neplatná. Jako zákazník e-shopu chci, aby byla k dispozici možnost stornování objednávky, pokud se rozhodu, že zboží již nepotřebuji nebo chci jiné. Akceptační kritéria Storno objednávky bude přístupné přes reakční tlačítko v detailu objednávky. Při stornování objednávky musí být zákazník informován. Storno se musí ihned projevit v databázi e-shopu. Implementační poznámky Jsou dvě možnosti jak notifikovat zákazníka, SMS zprávou nebo e-mailem. Notifikace SMS zprávou bude realizována, pokud bude zadavatel ochotný platit SMS bránu. Notifikace pomocí e-mailu bude realizována příkazem na server pro lepší formátování a podepsání e-mailu.
2.3.3 Přehled objednávek Jako uživatel aplikace chci mít k dispozici přehled všech objednávek, abych si mohl udělat lepší obrázek o chodu e-shopu a mohl rychleji reagovat na požadavky zákazníků. Jako zákazník e-shopu chci, aby mohl správce e-shopu okamžitě reagovat na moje požadavky na úpravu objednávky. Akceptační kritéria Uživatel bude mít k dispozici seznam objednávek. Každá objednávka bude barevně označená podle jejího stavu. V přehledu objednávek se budou u každé objednávky zobrazovat základní informace o ní.
13
3 Použité nástroje Před začátkem vývoje bylo zapotřebí zhodnotit požadavky na aplikaci a vybrat vhodné programovací nástroje pro realizaci. Musel jsem brát zřetel na snadnou správu aplikace, možnost přidávat další rozšíření, podporu zvolených nástrojů a jejich dostupnost. V této podkapitole zmíním nejzajímavější z použitých nástrojů.
3.1 Nette Framework Nette Framework je framework pro jazyk PHP. Tento framework je český produkt a v době vývoje aplikace byl volně k dostání. Charakteristickými znaky frameworku jsou ladící nástroje, dokonalé zabezpečení, rychlost a výkon, jednoduchost, MVC, open-source licence a hlavně široká komunita uživatelů.[6]
Obrázek 2: Architektura MVC
Hlavní motivací pro využívání MVC architektury bylo oddělení dat, logiky a uživatelského rozhraní. Kód psaný strukturovaně je nepřehledný, špatně se udržuje a rozšiřuje. Tyto problémy MVC odstraňuje a navíc dává prostor pro frameworky, které zvládají lépe využívat výhody architektury. Zjednodušeně řečeno je vše rozděleno na tři části - model, viewer a controller. Model se stará o data, viewer o uživatelské rozhraní a controller tomu všemu dává řád v podobě logiky. V dnešní době je MVC to nejlepší, co může vývojář zvolit pro tvorbu své aplikace.
14
Tracy Velkou výhodou Nette je Tracy. Tento nástroj pro ladění umožňuje vývojáři úplný přehled o chodu aplikace. Dokáže reportovat chyby a to jak na e-mail tak i do logovacího souboru. Jeho chod se dá omezit podle přání a tím pádem běžný uživatel nemusí mít potuchy o tom, že je tento nástroj aktivní. Tracy obsahuje několik metod pro usnadnění vývoje, z nichž nejznámější jsou pro výpis dat, stopky, logování a detekci režimu.
Obrázek 3: Ukázka chybové stránky generované pomocí Tracy
Formuláře Stěžejním bodem každého systému jsou uživatelské vstupy. Každý takový vstup se může stát potenciální hrozbou, pokud nebude ošetřený. Neošetřený vstup může způsobit nestandardní chování systému nebo umožnit přístup do částí, kam by se obyčejný uživatel neměl dostat. V nejhorším případě může dojít ke ztrátě dat. Nette nám dává volbu vytvoření validace formuláře už při jeho tvorbě. Existují předdefinované komponenty formuláře jako inputy typu text, textarea, upload a další. Ke každému typu lze navolit vlastní validace s textem oznámení. Výhodou je, že taková validace je jak na straně uživatele, tak na straně serveru. To vše zkracuje kód a zabraňuje vznikání dlouhých úseků s validací.
15
Další pomůckou jsou takzvané továrničky. Zpravidla se jedná o úseky kódu, který má tendenci se opakovat na více místech. Továrničky slouží k zamezení duplicity kódu a lze je využít pro tvorbu více stejných formulářů, kde je vzhled a funkce formuláře obsažen právě v továrničce. Dále může mít formulář centrální zpracování. To však není tak používané, jelikož i když jsou formuláře stejné, mohou sloužit k jiným účelům. Latte Poslední velkou částí je šablonovací sytém Latte. Systém lze využít i samostatně bez framewoku, ale tento způsob je již přežitý. Šablonovací systémy skvěle doplňují MVC model a ještě více zpřehledňují práci s HTML kódem. V presenterech, které právě tyto šablony
vykreslují,
máme
možnost
posílat
do
šablon
vlastní
proměnné
a ty pomocí speciálních maker vypisovat do HTML struktury.
3.2 NetBeans IDE Jedná se o velmi rozšířené vývojové prostředí. NetBeans lze získat v různých distribucích jako je třeba Java nebo PHP. Také lze mít všechna rozšíření naráz, ale to by mohlo způsobovat pomalejší chod. Proto je lepší pracovat jen s tím, čeho se týká zaměření projektu. IDE vyžaduje ke svému správnému chodu instalaci několika dalších běžně dostupných rozšíření pro počítač. Některé IDE jako například Android Studio mohou vyžadovat i povolení virtualizace na procesorech. Celé vývojové prostředí je dostupné zdarma.[2]
Obrázek 4: Ukázka vývojového prostředí v NetBeans IDE
Rozdíl mezi IDE a obyčejným vývojovým prostředím jako je například PSPad nebo SublimeText 2 spočívá v možnosti tvorby projektů. Tyto projekty jsou velmi komplexní 16
a IDE je dokáže brát jako jeden celek a rozlišit jiné úseky kódu, které do projektu nepatří. Další výhodou je validace napsaného kódu. Validace není stoprocentně účinná, ale dokáže odhalit překlepy v kódu nebo neexistující funkce a metody. Díky tomu, že IDE vytváří projekty, je schopné poskytnout našeptávač funkcí a proměnných. To velmi zrychluje práci a navíc eliminuje záměny funkcí, neboť k vlastním funkcím lze dopsat krátkou dokumentaci, která se zobrazí v našeptávači.
3.3 Linux Pro vývoj aplikace nestačí jen kvalitní prostředí, ale je zapotřebí dalších nástrojů. Některé nástroje jsou volně šiřitelné a pro některé je nutné zakoupit licenci. Podle mého názoru je nejlepší možností pro vývoj větší aplikace, na které pracuje jeden člověk bezpochyby prostředí Linuxu, a to díky množství nástrojů, které jsou pro něj k dispozici a hlavně díky možnosti vytvoření lokálního serveru. Ubuntu Pro Linux existuje spousta distribucí OS a každý je přizpůsobený trochu jiným účelům. Pro svůj vývoj jsem zvolil distribuci Ubuntu. Můj výběr byl ovlivněn z největší části příjemným uživatelským prostředím a tím, že mi dovoluje používat vše, co potřebuji. Samotný OS emuluji pomocí programu VirtualBox. Krusader Krusader je ekvivalent programu Total Commander pro prostředí Windows. Tento průzkumník zvládá připojení přes FTP a mnoho dalších protokolů. Obrovskou výhodou je přepnutí do super uživatelského režimu, díky kterému může uživatel provádět akce, ke kterým by v normálním režimu neměl oprávnění. Apache2 Jedná se o volně dostupný systém pro operační systém Linux. Umožňuje uživateli provádět veškerá nastavení a instalace dalších komponent. Ovládá se pomocí příkazů přes terminál. Pro ovládání přes terminál je uživatel dotazován na správcovské heslo, aby se k ovládání nedostal uživatel bez oprávnění. Apache2 se dají nainstalovat samostatně, ale nejčastěji jsou součástí balíků jako například LAMP nebo WAMP. Obsah balíků se může lišit, ale většinou obsahují spolu s PHP serverem i databázový server. Já osobně využívám balík LAMP. 17
Yakuake Většina lidí zabývající se informatikou se někdy setkala s příkazovým řádkem, jedno v jakém OS. Program Yakuake je pouze jednou variantou jeho zobrazení. Klasické okno nám může být někdy na obtíž. Yakuake se nespustí v klasickém okně, ale schová se při spuštění do horní lišty a lze ho vyvolat pomocí nastavitelné klávesové zkratky. Při vyvolání se vysune z horní lišty panel terminálu, do kterého můžeme psát příkazy. Stejně jednoduše ho lze zase skrýt, aniž by se musel stále vypínat a zapínat.
3.4 Bootstrap Tento nástroj lze nejlépe vystihnout jako rozšíření pro jazyk HTML. V dnešní době je brán velký zřetel na responzivitu a uživatelské prostředí pro správu obsahu musí být ovladatelné na všech zařízeních. Bootstrap využívá klasické HTML tagy spolu s atributy id a třídy. Právě díky vlastním atributům získává kód příjemný a responzivní vzhled bez dalšího kódovaní v jazyce CSS. Formuláře Jak již bylo zmíněno dříve, pro CMS jsou velmi důležité formuláře. Existují nástroje, díky kterým lze vygenerovat formulář podle libosti přímo v Bootsrapu. Tím získáme hotovou šablonu pro formulář, do kterého pouze vložíme připravené prvky. V kombinaci s PHP frameworky vzniká silná zbraň pro rychlou tvorbu kvalitních formulářů.
Obrázek 5: Ukázka formuláře generovaného pomocí Bootstrapu
Uživatelská základna Tento nástroj rovněž disponuje velkou uživatelskou základnou, díky čemuž lze dohledat stovky již předpřipravených prvků pro vlastní stránky. Dokonce jsou volně k dostání celé šablony pro webové stránky.
18
3.5 JQuery a pluginy Jedná se o knihovnu pro jazyk JavaScript, hojně využívanou pro její důraz na interakci s HTML. Psaní skriptů v jQuery je výrazně jednodušší než v samotném JavaScriptu a díky tomu je tato knihovna velmi rozšířená a oblíbená. Navíc je možné využít další knihovny pro jQuery, které přidávají obrovský počet rozšíření. UI UI je Framework se zaměřením na uživatelské rozhraní, využívaný k tvorbě pokročilých efektů jako řazení, přetahování nebo posouvání objektů. Je ovšem nutné dávat pozor na využívání více frameworků. Na podobném principu pracuje i samotný Bootstrap a díky tomu, že poskytuje více možností a je univerzálnější, jsem se rozhodl jQuery UI nevyužívat. Validation Engine Validace formulářů na straně uživatele je velmi ožehavé téma. V dnešní době lze validovat i pomocí HTML, ale to nedokáže pokrýt všechny možnosti a problémy validace složitých formulářů. Proto je knihovna jQuery Validation Engine skvělou možností, jak vylepšit validaci na straně uživatele. Validace se jednoduše implementuje a vytváří u špatně vyplněných polí vyskakovací okna s popisem chyby. Asi největší výhodou je možnost dopsání vlastních pravidel a také fakt, že lokalizace existuje v mnoha jazycích včetně češtiny.
19
4 Uživatelské rozhraní I když nejdůležitější části pro systém správy obsahu internetových stránek běží na pozadí stránek a běžný návštěvník se s nimi nesetká, pro uživatele spravující stránky je důležité, aby byl přehledný a svižný. Ve správně navrženém UI se uživatel cítí příjemně, a i když ho vidí poprvé, hned je mu jasné, co k čemu slouží. V takovém prostředí se rychle naučí orientovat a bude se do něj rád vracet.[5]
4.1 Vlastnosti UI Každý někdy slyšel, že v jednoduchosti je krása a při návrhu UI to platí dvojnásob. Je nutné myslet na to, že uživatel nemusí systému rozumět tak dobře jako jeho tvůrce, a tím pádem ho může odradit už jen pohled na zbytečně složitý vzhled. Při využívání nadbytečného množství prvků dochází ke zpomalení systému. S jednoduchou strukturou naopak přichází rychlost systému. Teď nemám na mysli zpomalení
kvůli
dotazům
do
databáze
nebo
složitému
generování
XML
pro exporty - to vše samozřejmě systém zpomaluje, ale přichází to až po delší době provozu.[1]
Obrázek 6: Responzivní design uživatelského rozhraní
Značný vliv na prostředí má i jeho responzivita. Ta zajištuje, že UI je přehledné a hezké na pohled na jakémkoli zařízení. Díky tomu se CMS stává mobilní a snadno použitelné ve všech situacích. 20
4.2 Přihlášení a layout První, co uživatel spatří při vstupu do CMS, je stránka s přihlášením. Tato stránka by měla obsahovat pouze formulář s přihlášením bez dalších prvků. Nanejvýš může obsahovat informace o frameworku a verzi CMS. Je vhodné, aby stránka byla sjednocená se stylem dalších stránek z CMS, i když nemá stejný layout. To vše hlavně pro pocit celistvosti systému.
Obrázek 7: Přihlašovací formulář
Šablona layoutu obaluje všechny další stránky uvnitř CMS, které vyžadují přihlášení. S prvky šablony tedy přichází uživatel nejčastěji do styku a ovládá je v celém CMS. Layout se rozděluje na tři části, kdy první a druhá slouží pro navigaci a sdělování informací a třetí se využívá pro zobrazení obsahu. Navigace Ke snadnému procházení obsahu CMS slouží dvě lišty. Jedna je umístěná v hlavičce a druhá na levé straně stránek. Tyto lišty jsou neměnné a provází uživatele na všech pohledech CMS. Jsou jednoduše zpracované a obsahující pouze efekty dropdown pro větvení menu. Přidání dalších efektů by již dělalo menu nepřehledné a hůře ovladatelné a zvyšovalo by riziko špatné optimalizace.
21
Lišta umístěná v hlavičce CMS má převážně informativní úlohu a notifikuje uživatele o úkolech a objednávkách, a to pomocí ikony zvonku a bubliny obsahující informaci o počtu notifikací. Další prvek lišty slouží k náhledu návštěvnické části webu, aby mohl uživatel okamžitě zkontrolovat své úpravy. Posledním prvkem lišty je tlačítko s dropdown efektem umožňujícím zobrazit vlastní profil, odhlášení nebo informace o verzi systému. Druhá lišta umístěná vlevo od obsahu slouží výhradně k navigaci v systému. Stromovou strukturu menu lze zobrazit pomocí dropdown efektu a díky tomu si navigace udržuje svou přehlednost, i když obsahuje větší množství prvků. Lištu lze skrýt pomocí tlačítka, čímž vzniká další prostor pro obsah.
4.3 Tabulky Nejčastějším způsobem, jak zobrazit uživateli více informací stejného typu jako jsou články, galerie nebo objednávky, je tabulka. Tabulka zaručuje stejný vzhled pro každý svůj řádek, i když je zrovna prázdný. Spolu se stránkováním lze tímto způsobem zobrazit neomezený počet záznamů, aniž by se uživatel začal v obsahu ztrácet.
Obrázek 8: Vzhled layoutu s obsahem CMS
V systému vychází všechny tabulky z jedné hlavní a liší se pouze v drobnostech a vzhledu. To je způsobeno jejich odlišnou úlohou. Například v tabulce pro zobrazení objednávek jsou řádky barevně odlišeny podle jejich stavu, ale stále jde o stejnou tabulku. Jedinou nevýhodou tabulek je zobrazení při nízkých rozlišeních, protože tabulky nemohou být plně responzivní. 22
4.4 Systém sloupců Díky rozšíření pro HTML využívá obsah takzvaný grid systém. Ten slouží pro rozdělení stránky na sloupce a řádky. Od tohoto rozložení se odvíjí responzivní design na všech zařízeních. Díky tomu se mohou vytvářet odlišné kombinace různě širokých sloupců s různými účely a obsahy, které se budou řadit pod sebe tak, jak je zamýšleno. Tento systém lze navíc nadefinovat zvlášť pro monitory PC, tablety a mobilní zařízení.[12]
4.5 Tvorba obsahu Při tvorbě stránek, na kterých se tvoří obsah, využívám několik prvků. Opět beru zřetel na to, aby každá stránka byla stejná a aby uživatel již znal prvky v ní, aniž by se s nimi musel seznamovat. V horní části se nachází akční tlačítka uložení a návratu na přehled komponenty. V části obsahu se již naplno využívá grid systém. Ten rozděluje obsah na dva sloupce. Sloupec vlevo slouží k vytváření samotného obsahu a sloupec vpravo se používá pro rozšířené nastavení obsahu. Pravý sloupec navíc využívá rozbalovací boxy, díky kterým nemusí uživatel rolovat stránku, aby našel to, co hledá.
Obrázek 9: Formulář pro tvorbu článků
Editor Textový obsah se vytváří pomocí editoru. Má to dva hlavní důvody. Prvním je ten, že obyčejný textbox by nutil uživatele znát jazyk HTML pro to, aby mohl formátovat text. Druhým důvodem je možnost vkládání obrázků, odkazů a celkově velké možnosti vkládání rozšířeného obsahu.
23
Obrázky Některé pohledy tvorby obsahu jako například produkty a galerie nabízejí editaci přiřazených obrázků. To je důležité pro nastavení výchozího obrázku nebo pro úpravy obrázku pro slideshow a lightboxy. Díky grid systému vše zabírá relativně málo místa i při velkém množství obsahu.
Obrázek 10: Seznam obrázků uložených v galerii
24
5 Popis řešeného problému Cílem zadání je vytvořit systém pro správu obsahu internetových stránek. Takový systém je rozdělen na část pro správce a část pro návštěvníka. Ve zkratce se dá říct, že správcovská část obsahuje vše, co se týká spravování obsahu a jeho tvorby. Návštěvnická část se naopak stará o zobrazení tohoto obsahu. Design a architektura projektu je odvozena z návrhu UI a seznamu použitých nástrojů. Pro správnou funkci a splnění všech požadavků se využívá analýza projektu a user stories vytvořené při komunikaci se zadavatelem. Díky tomu má vývojář jasné a průhledné zadání a díky kritériím a poznámkám z každého user story může vytvářet přesný a čistý kód.[7]
5.1 Správcovská část Správcovská část je přístupná uživateli a on tak může vytvářet unikátní obsah. Tato část dále obsahuje nástroje, které mu umožnují lepší ovládání a práci se systémem. Uživatel tak může měnit nastavení, které ovlivňují celé stránky. Na správcovskou část nejsou kladeny stejné nároky jako na návštěvnickou. Například vzhled není na prvním místě, spíše se upřednostňuje funkčnost.
5.1.1 Úkoly a verzování Po přihlášení se uživatel dostane na úvodní stránku administrace. Tady má možnost zkontrolovat si na jednoduchém přehledu chod stránek. Možnost vytvářet si vlastní úkoly mu umožňuje mít pod kontrolou všechny své plány a požadavky. Tyto úkoly vidí barevně odlišené podle stavu v příjemném prostředí tvořeném tabulkou. Pomocí tlačítka může přidat nový úkol a přiřadit ho existujícímu uživateli. Úkol se skládá z názvu a jeho popisu. Takto vytvořený úkol se ukáže uživateli jako notifikace, kde si může prohlédnout všechny své úkoly. Pokud je úkol již splněný, je možné ho smazat nebo označit jako hotový. Vytváření verzí slouží hlavně pro vývojáře. Díky těmto informacím mohou znát stav a schopnosti své verze CMS. Verze se dělí na globální a individuální. Globální verze jsou stejné pro všechny stránky využívající tento systém. Vidíme v nich to, co vývojář zahrnul do systému a co se od této chvíle vyskytuje na všech webech. Individuální verze 25
slouží k evidenci toho, co bylo na konkrétních stránkách upraveno nebo vytvořeno na míru.
Obrázek 11: Ukázka seznamu úkolů
5.1.2 Menu Webové stránky potřebují svojí navigaci, díky které může uživatel procházet jejich obsah. Taková navigace se nazývá menu. V komponentě menu je možné vytvořit neomezený počet navigací. Každá navigace je přitom unikátní a obsahuje svoje vlastní položky. Celé menu je možné zveřejnit nebo zneveřejnit. Každé menu obsahuje různé druhy položek, na které se posléze váže obsah. Počet položek je opět neomezený a může se neomezeně zanořovat. Mohou tak vznikat i velmi složité stromové struktury. Každá položka menu je unikátní a obsahuje svůj identifikátor, který ji zastupuje v URL nebo v kódu. Na položku lze navázat obsah článku, galerie, e-shopu, seznamu apod. Spolu s obsahem se na položku váže i vlastní SEO, které lze nastavit už při její tvorbě, anebo až při úpravách. Položky je možné mazat i upravovat podle libosti uživatele.[4]
5.1.3 Články V komponentě článků je možné vytvářet různé články, které se poté mohou přiřadit k položkám menu. Při tvorbě článku je k dispozici editor, který umožňuje kvalitní tvorbu textu. Na samotný článek lze také navázat SEO parametry, protože článek nemusí být nutně přístupný pouze přes položku menu. Další možností je připojit k článku již vytvořenou galerii. Tím pádem vzniká kombinace dvou komponent, která se zobrazí při každém otevření článku v menu nebo samostatně.[4]
26
Články je možné sdružovat do kategorií, které mají vlastní nastavení pro články. To umožňuje stejné nastavení pro více článků, aniž by bylo nutné ho u každého článku vyplňovat zvlášť. Kategorie může mít vlastní popis a také unikátní identifikátor. V položce menu lze kategorii vypsat jako seznam článků a tímto způsobem lze vytvářet například různé rubriky, blogy nebo zpravodajství.
5.1.4 Galerie Komponenta galerie je velmi podobná komponentě s články. Je možné vytvářet v ní popis pomocí editoru a různé SEO parametry. Nejdůležitější částí je ovšem vkládání obrázků pomocí klasického HTML inputu upload. Po uložení galerie je možné spravovat jak samotné parametry patřící přímo galerii, tak i samotné obrázky. To vše lze poté využít v modulech. Je samozřejmostí, že obrázky můžeme do galerie přidávat a odebírat je z ní.[4] Galerie mají vlastní kategorie postavené na stejné struktuře jako články. Kategorii lze vypsat jako samostatnou položku menu jako seznam galerií.
5.1.5 Moduly Velmi užitečnou částí webu jsou zásuvné moduly. Tato komponenta slouží k vkládání speciálních částí do obsahu webu pomocí modulových pozic. Každý modul je obalený unikátní HTML strukturou a navíc je možné přidávat k němu přípony tříd do HTML. Moduly tak lze snadno rozlišit. Při tvorbě nového modulu je k dispozici seznam všech dostupných modulů s jejich popisem. V modulu lze nastavit zobrazení jeho názvu nebo jeho zveřejnění. Důležitou částí modulu je také nastavení jeho pozice na stránkách. Tam se posléze modul objeví, pokud ze zveřejněný. Pro moduly můžeme vytvářet vlastní HTML šablony, což umožňuje, aby se modul dal využít mnoha různými způsoby. Pro správnou funkci modulů jsou připraveny univerzální parametry. Tyto parametry slouží například pro výběr menu, které se má zobrazit. Výhodou je, že do parametrů lze přidat vlastní parametr a ten poté využít v šabloně. Poslední částí je výběr, kde všude se modul zobrazí. Tímto se nemyslí pozice v layoutu stránek, ale už jednotlivé položky menu. To vše nám dovoluje vytvořit modul, který 27
se bude zobrazovat pouze na titulní straně a naopak. Dále můžeme nastavit, aby se modul zobrazil všude na stránkách.
5.1.6 Uživatelé Každý, kdo chce užívat CMS, si musí nechat vytvořit svůj profil. K tomu je potřeba, aby správce takový profil založil. Při založení se novému uživateli odešle e-mail s přihlašovacími údaji. Uživatel si může prohlížet profily ostatních uživatelů a může upravovat svůj profil podle aktuálních informací. Uživatelé se řadí do speciálních skupin, které sdílejí stejné nastavení. To správci umožňuje rozlišovat další zaměstnance a povolit jim vstup pouze do míst, která nutně potřebují pro svoji práci. U každého uživatele se monitoruje jeho přihlášení a jeho akce v systému. To vše je poté k zobrazení ve speciální záložce, kde má správce k dispozici všechna přihlášení za poslední měsíc. Dále má k dispozici seznam provedených akcí a jejich autory.
5.1.7 Nastavení a měřící kódy Tato komponenta slouží k nastavení všech globálních parametrů pro stránky vyjma e-shopu. Lze zde nastavovat kontaktní informace a názvy stránek. Další parametry se přidávají podle libosti pomocí příkazu na databázi. Pokud majitele webu zajímá, jak si vedou jeho stránky na internetu, nejspíše bude využívat některý z měřících kódů. Nejčastější jsou kódy od firem Google nebo Seznam. Měřící kódy lze vložit na stránky do layoutu bez pomoci programátora.
5.1.8 E-shop Rozšíření pro internetový obchod nemusí být nutnou součástí stránek. Lze je vytvořit i bez této komponenty. Naopak správa internetového obchodu vyžaduje pro svojí funkci základní CMS. Tato komponenta umožňuje vkládání dalšího obsahu v podobě produktů a kategorií.
28
Produkty Obsahem internetového obchodu jsou produkty a jejich varianty. V CMS je možné produkty vytvářet s vlastním popisem a nastavením. Ke každému produktu můžeme nastavit varianty a skladové zásoby, které se potom aplikují do objednávek a košíku. U produktu lze nastavit sleva nebo stav. To slouží k zobrazení speciálních výpisů v návštěvnické části. Dále lze k produktu nahrát jeho obrázky podobně jako u galerie, pouze s tím rozdílem, že u produktu lze navíc zvolit hlavní obrázek, který ho bude zastupovat ve výpisech. Kategorie Kategorie slouží pro sdružování produktů se stejným zaměřením. To umožňuje vypisovat seznamy podobně jako u článků. Rozdíl je v tom, že kategorie se mohou dělit na další kategorie a toto zanořování je neomezené. Dále může kategorie obsahovat vlastní obrázek podobně jako produkt. Objednávky Pro dokončení nákupu slouží objednávkový proces. Ten se skládá z košíku a dokončení objednávky. Do košíku lze vkládat produkty, které má zákazník v plánu objednat. Po dokončení objednávky se pošle notifikace zákazníkovi i správci stránek. Dále je správce upozorněn při přihlášení do CMS stejně jako u úkolů. Uživatel CMS má k dispozici seznam všech objednávek, které může dále vyřizovat.
Obrázek 12: Seznam objednávek a jejich barevné odlišení
Součástí objednávek jsou slevy a slevové kódy. Jde o jiný typ slevy, než sleva u produktu nebo kategorie. Tyto slevové kódy se zadávají při dokončení objednávky. Uživatel si může vygenerovat slevový kód podle potřeby. Může ovlivnit jeho strukturu, trvání, počet použití nebo určit pro jaké produkty a kategorie bude platit. Dále může sledovat, jak moc je kód využíván a popřípadě ho vypnout.
29
Nastavení a exporty Komponenta pro internetový obchod má vlastní nastavení mimo globální nastavení. V tomto nastavení lze přidávat statusy produktů, dopravu nebo způsob platby. Poslední částí správy e-shopu jsou exporty do mobilní aplikace a na Facebook. Export pro mobilní aplikaci je plně připraven, ovšem mobilní aplikace je stále ve vývoji. Export na Facebook slouží pro nabídku produktů na této sociální síti. Presenter pro exporty je také připravený pro přidání dalších exportů na Heuréku a Zboží.
5.2 Návštěvnická část Tato část zpracovává data vložená do databáze pomocí správcovské části a zobrazuje je návštěvníkům. I když se může zdát, že veškerou těžkou práci odvede systém na pozadí stránek, není to tak. Zobrazení stránek je nejdůležitější část z CMS. Systém musí být schopný eliminovat nedostatky uživatele a chyby a bugy CMS tak, aby návštěvník nic nepoznal.
5.2.1 Navigace a navázaný obsah Navigace vytvořená pomocí komponent v administraci systému se vypisuje v návštěvnické části pomocí modulu. Tento modul lze využít pro více menu, což umožňuje rychlou tvorbu navigace. Položky se rozlišují pomocí jejich typu, který jim je přidělen při vytváření. Podle typu menu se rozlišuje, jaký obsah bude na položku navázaný. Pro položky, na které je navázaný obsah, existují speciální šablony, které se posléze vykreslí do obsahu layoutu. Pro položky, které nemají obsah nebo odkazují na externí zdroje, není potřeba mít speciální šablonu.
5.2.2 Články Obsah webu nemusí být nutně navázaný pouze na položky menu. Díky existenci kategorií a modulů se seznamy článků lze vypsat článek samostatně bez využití položek menu. Je proto třeba použít vlastní logiku pro výpis článků v návštěvnické části. Články mají svůj vlastní presenter, který se stará o získání dat pro výpis článku. Detail článku využívá i vlastní oddělenou šablonu. Tu lze nezávisle na ostatních částech návštěvnické části upravovat. Dále lze vypsat i galerii připojenou k článku stejně jako u položky menu. 30
5.2.3 Galerie Zobrazení samostatné galerie je velmi podobné jako zobrazení článků. Galerie mají také svůj vlastní presenter, pomocí kterého se získávají data pro zobrazení. Dále jsou k dispozici šablony, které lze opět nezávisle na ostatních upravovat.
5.2.4 E-shop E-shop v návštěvnické části lze zobrazit dvěma způsoby. Nejlepším a nejjednodušším způsobem je zobrazit v položce menu index e-shopu. V šablonách pro index menu již lze zobrazit jakákoliv kategorie nebo produkt. Dalším způsobem zobrazení jsou moduly. V těchto modulech se zobrazuje struktura kategorií a pomocí ní se lze dostat k samotnému produktu.
Obrázek 13: Náhled produktů internetového obchodu
Další částí je objednávkový proces, košík a rekapitulace objednávek. Košík je klasický modul, který lze umístit a nastylovat podle libosti kamkoliv na stránky. Z košíku je možné dostat se do samotného objednávkového procesu a také k dokončení objednávky. Zákazníkovi se po dokončení objednávky zasílá e-mail s odkazem na rekapitulaci. Tento odkaz obsahuje unikátní token objednávky, aby se k rekapitulaci nemohl dostat nikdo neoprávněný.
5.2.5 Moduly Jak již bylo zmíněno v části o správě, moduly se starají o výpis speciálních částí kódu do obsahu stránek. Návštěvnická část obsahuje většinu logiky pro samotné moduly od funkce šablon až po získávání dat pro výpis. Každý modul má svojí třídu, kde jsou data získávána z databáze a kde dostávají podobu, kterou je schopný zpracovat hlavní presenter. Každý modul prochází procesem, kdy se zjišťuje, na jakém místě 31
se má vypsat. Při tomto procesu se modul také obalí vlastním HTML tagem pro rozlišení od ostatních modulů.
5.2.6 Routování O vzhled URL webu se stará takzvaná RouteFactory. Ta je součástí Nette Frameworku, ale je nastavena pouze pro základní funkčnost. CMS má dopsané speciální routy pro e-shop, články, galerie a položky menu. To má za výsledek, že se v URL stránek zobrazených v prohlížeči zobrazují pouze předem nadefinované kombinace a samotná URL nepůsobí zmateně.
5.2.7 Layout Za veškerý obsah zobrazený v části stránek pro návštěvníky zodpovídá šablona s názvem layout. Je to obal všech ostatních komponent. Vzhled layoutu je neměnný a pevně nadefinovaný. Umožňuje vložení pozice pro generování obsahu a systémových zpráv. Každá šablona v návštěvnické části obsahuje blok pro meta tagy stránky. Tyto tagy se při zobrazení stránky přesouvají právě do připravené části layoutu, kde se vypíší. V poslední řadě jsou v layoutu umístěny modulové pozice, které umožňují vypsat moduly.
32
6 Implementace Vývoj aplikace byl od samotného začátku postaven na vybudování úplně nového systému bez dědění z jiných projektů nebo aplikací. Jediné externí zdroje jsou frameworky a pluginy k využívaným jazykům. Tím vzniká unikátní systém vytvořený přímo pro účely správy obsahu bez vedlejších funkcí. Projekt obsahuje vlastní návrh databáze, desítky tříd a velké množství šablon. Spolu s externími nástroji je velikost systému v desítkách MB. Samotná implementace nabízí několik pozoruhodných řešení a kompromisů. Systém se neustále rozvíjí, spousta řádků kódu už se přepsala a spousta jich teprve čeká na přepsání. Je to živý systém, který se neustále rozšiřuje a vyvíjí s každým dalším projektem. Musí se uzpůsobovat každé nové části, a čím více částí obsahuje, tím je složitější pohlídat, aby spolu všechny byly kompatibilní.
6.1 Databáze a modely Pro uchování dat se využívá MySql databáze a pro přístup k ní knihovny PDO. Databáze obsahuje 59 tabulek, které jsou rozdělené do dvou skupin. První skupina je využívána samotným CMS pro jeho správnou funkci. Druhá skupina je určena pro rozšíření na internetový obchod. Vazby mezi tabulkami využívají typy 1:1, 1:N i M:N a to podle potřeby a povahy funkcí v CMS. Pro většinu záznamů, které se při ukládání zapisují do více tabulek, je nastaveno i kaskádové mazaní při smazání hlavního záznamu.[15] V prostředí frameworku se pro přístup k databázi využívají modely. Každá tabulka může mít svůj vlastní model, pokud je potřeba k ní přistupovat. Pro všechny modely existuje jeden hlavní, ze kterého ostatní modely dědí. Hlavní model obsahuje jednoduché, ale nejpoužívanější metody jako je insert, delete, find nebo update. Dále obsahuje veškerou potřebnou logiku pro vytvoření objektu modelu. Ostatní modely mohou obsahovat pouze globální proměnnou s názvem tabulky pro její připojení. Pro psaní specifických dotazů lze využít možnosti napsat si vlastní metodu s dotazem na databázi. To se nejvíce využívá pro obsah stránek. Naopak pro nastavení a konfigurátory postačí metody obsažené v základním modelu.[11]
33
6.2 Presentery a šablony Krom modelů jsou ve struktuře Nette Frameworku ještě presentery a šablony navržené pro jeho lepší funkce. Každý presenter musí mít unikátní název, aby nedocházelo k duplicitám, které by měly za příčinu chyby v běhu systému. Pro presentery jsou vytvořené složky se šablonami. Každá šablona musí mít unikátní název v rámci jednoho presenteru. Jako výchozí šablona se bere ta, která má název default. Presenter Komunikaci mezi všemi částmi MVC architektury zajišťují takzvané presentery. Každý presenter má svůj vlastní životní cyklus a podle něho se určuje, kdy a jak se mají jaké metody použít. Nejčastěji využívané skupiny metod jsou vykreslovací metody sloužící pro vykreslení dat do šablon. Pro tvorbu komponent existují stejnojmenné metody a využívají se například pro formuláře. Velmi využívané jsou jednoduché handle metody volané pomocí odkazu. Vykonávají například mazání záznamů. Tabulka 1: Seznam presenterů v administrátorské části
Název presenteru
Popis
AndroidApp
Komunikace s mobilní aplikací
Article
Tvorba článků
EshopSettings
Nastavení internetového obchodu
Feed
Feedy na Facebook a porovnávače
Gallery
Tvorba galerií
Home
Přihlášení uživatele
Menu
Tvorba menu
Modules
Tvorba modulů
Opening
Úvodní stránka CMS
Orders
Objednávky a slevové kódy
Products
Tvorba produktů a kategorií
Settings
Nastavení CMS
Stats
Statistiky internetového obchodu
Users
Uživatelé
Version
Verzování CMS
34
Všechny
presentery
dědí
z jednoho
hlavního,
který
obsahuje
nejdůležitější
a nejvyužívanější metody, které potřebuje každý z nich. Dále lze všechny presentery rozšířit o vlastní knihovny nebo o knihovny obsažené již ve frameworku Nette. Díky tomu presenter využívá jen ty zdroje, které opravdu potřebuje. Šablony Uživatel CMS přichází do kontaktu pouze se šablonami. Díky nim si může zobrazit záznamy z databáze nebo do ní záznamy vkládat. Všechny šablony jsou načtené v jedné hlavní, která je obaluje a určuje vzhled všeho krom obsahu. Díky šablonovacímu systému lze využívat makra v šablonách a vypisovat data různými způsoby.
6.3 Moduly Moduly jsou nejsložitější obsah tvořený pomocí CMS. Je to zapříčiněno tím, že se nejedná o statický obsah jako například u článků. Každý typ modulu má jinou funkci, a tím pádem nelze jednoznačně určit, co přesně má daný modul dělat. Bylo nutné každý modul oddělit tak, aby tvořil samostatnou část nezávislou na ostatních. Navíc bylo nutné odlišit od sebe více modulů stejného typu. Ve správcovské části je tvorba modulu stejná pro všechny typy, liší se pouze v parametrech, které jsou unikátní pro každý typ modulu.
Obrázek 14: Diagram popisující životní cyklus modulu
Parametry Pro tvorbu dynamických modulů využívajících jiné komponenty CMS je potřeba identifikovat jejich obsah. Pro tento účel jsou vytvořené parametry modulu. Díky nim lze jednoznačně určit, jaké obrázky se mají ukázat ve slideru nebo jaká kategorie je určená pro novinky. Navíc si lze pro svoji potřebu přímo při vytváření modulu nastavit vlastní parametry, které jsou pak dostupné stejně jako ostatní.
35
Struktura modulu Každý modul se drží předepsané struktury tak, aby šlo snadno vytvářet nové moduly. Díky stejné struktuře lze snadno nově vytvořené moduly přenést na starší CMS. Každý typ modulu má svůj základní záznam v databázi. Ten se při vytváření nového modulu v sytému rozšíří o unikátní prvky pro daný modul. Zbytek modulu je obsažen v návštěvnické části. Modul se nachází ve složce pojmenované podle názvu modulu. Složka obsahuje šablony a jednu třídu starající se o chod modulu. Každá třída má svůj konstruktor a svoji metodu pro získání dat. Pokud je potřeba, mohou se objevovat v různých modulech další metody.
Obrázek 15: Zdrojový kód funkce pro seřazení modulů podle jejich pozic
Při každém nahrávání stránky se volají metody pro získání modulu pro danou stránku. Moduly jsou navázané na položky menu, nebo se dají zobrazit úplně na všech stránkách. Jakmile jsou načtené všechny moduly, zavolá se metoda pro jejich rozlišení a získání dat pro každý z nich. Právě zde se volají jednotlivé třídy modulů a získávají se unikátní data pro každý z modulů.
36
Tabulka 2: Seznam dostupných modulů v administrátorské části
Název modulu
Parametry
Popis
Kontaktní formulář
name, e-mail
Formulář pro kontaktování správce stránek
Vlastní HTML
žádné
Vložení vlastní struktury HTML
Menu
menu
Vložení nabídky menu
Nejčtenější články
limit, category
Nejnovější články z webu nebo z kategorie
Nejnovější články
limit, category
Nejnovější články z webu nebo z kategorie
Slider
limit, category
Slider obrázků z kategorie
Vlastní JavaScript
žádné
Vlastní struktura JavaScriptu
6.4 E-shop Internetový obchod není tvořený pouze produkty a kategoriemi, stejně důležité jsou prvky, které ani nevnímáme. Krom obsahu obchodu jsou velmi důležité části pro košík a dokončení objednávky. Obojí je navíc rozšířeno o slevové kódy. Tím pádem vznikají složité algoritmy pro správný výpočet ceny. Každý produkt se nejprve musí přidat do košíku, aby si ho mohl zákazník zakoupit. Košík Jelikož systém obsahuje skladové zásoby a slevové kódy, je potřeba při přidání do košíku kontrolovat počet kusů produktu. Košík a dokončení objednávky jsou nejsložitější procesy v celém internetovém obchodu. Jakmile si zákazník vybere produkt a zvolí si počet kusů, vloží vše do košíku. Při této akci se nejprve musí zkontrolovat, jestli je zvolený počet kusů k dispozici. Pokud ano, ještě to neznamená, že se přidání do košíku podařilo, protože následuje kontrola obsahu samotného košíku. To vše proto,
37
aby uživatel nemohl přidat větší počet kusů díky tomu, že už v košíku produkt měl. Pokud všechny kontroly proběhnou úspěšně, přidá se produkt do košíku. Samotný košík je tvořený pomocí session, ve které se uchovávají informace o produktech. Každá informace o produktu musí obsahovat id produktu, název, kategorii, cenu a DPH. Tyto informace se následně využívají k přepočítání košíku. Košík se vykresluje jako speciální modul stránek. Obsahuje informaci o celkové ceně a je vstupní bránou k dokončení objednávky. Dokončení objednávky V košíku existuje tlačítko pro pokračování v objednávce. Díky tomu se zákazník dostane k formuláři pro vyplnění osobních údajů a následnému dokončení objednávky. Celý proces se spustí, jakmile data z formuláře úspěšně projdou validací. Shromáždí se všechny informace z košíku a z objednávkového formuláře, dojde k poslednímu přepočítání a k posledním validacím v košíku. Pokud je opět vše úspěšné, záznamy o objednávce se uloží do databáze.
Obrázek 16: Zdrojový kód formuláře sloužícímu pro přidání zboží do košíku
Posledním krokem je notifikování zákazníka o úspěšné objednávce a notifikování správce stránek. Pro obsah e-mailů je vytvořena speciální šablona napsaná tak, aby byla validní ve všech klientech. To v praxi znamená, že všechny CSS styly musí být zapsané přímo jako atributy HTML tagů, přičemž počet použitých tagů je omezen na tabulky a tagy pro formátování textu. Pro tuto šablonu se vytvoří pole dat s produkty a informacemi o zákazníkovi. To vše se poté vykreslí jako jedna proměnná typu řetězec a vloží se do objektu, který díky knihovnám pro odesílání e-mailů následně zprávy 38
odešle. Tím je proces objednávky ukončen a zákazník má v notifikaci k dispozici odkaz, na kterém si může prohlédnout rekapitulaci objednávky. Tato rekapitulace je dostupná pouze zákazníkovi, který objednávku provedl. To je zajištěno unikátním tokenem generovaným pro každou objednávku.
6.5 Exporty Pro rozšíření dosahu internetového obchodu jsou k dispozici aplikace, jako jsou například Facebook nebo Heuréka. Tyto aplikace si dokáží stáhnout soubory na adrese, která se jim zadá v nastavení účtu. Na této adrese jsou generovány exporty v různých formátech tak, aby vše odpovídalo požadavkům externí aplikace. Facebook, Heuréka K exportu na tyto typy aplikací slouží presenter s názvem Feed. Jedná se o generování obsahu stránek bez využití layoutu nebo jakýchkoliv stylů. Formát výpisu dat může být různý, ale většinou se jedná o formát XML. Pomocí zvoleného nastavení se získají data z databáze a podle šablony se vypíší v požadovaném formátu. Mobilní aplikace Export do mobilní aplikace slouží k propojení s jinou externí aplikací. Samotná aplikace ještě není k dispozici, ale CMS je na ní již připraveno. Tato aplikace má sloužit pro ještě větší mobilitu systému a to vše vede i k většímu pohodlí uživatele. Jako datový typ pro přenos dat jsem zvolil typ JSON. Komunikace s CMS probíhá pomocí zasílání požadavků na jeho URL. Tam takový požadavek rozezná objekt pro mobilní aplikaci a zpracuje ho. Součástí požadavku musí být i klíč k ověření. Každý požadavek mobilní aplikace bude vyžadovat návratovou hodnotu s daty nebo s chybou. Díky této komunikaci lze provádět jednoduché příkazy, jako změnu stavu objednávky nebo odeslání další notifikace. JSON Jedná se o datový formát, který není závislý na počítačové platformě. Vstupem do funkce generující tento datový formát může být téměř cokoli. Výstupem je vždy řetězec. Výhodou je, že tento formát je pro znalého člověka celkem čitelný
39
a jednoduchý. Navíc se dá využít v téměř každém programovacím jazyce. Nevýhodou může být to, že kódování je jen v UTF-8.
6.6 Menu a obsah Položky menu obsahují unikátní identifikátor s názvem slug, který lze zjistit i z URL adresy. Při návštěvě jakékoli stránky vytvořené v CMS se tento slug zjišťuje. Pokud se nepodaří slug identifikovat, návštěvník se přesměruje na úvodní stránku. Jestliže je slug nalezen, spustí se metoda pro získání obsahu. Rozliší se, jestli je stránka navštívena z některé z navigací, nebo se jedná o osamostatněný obsah. Pokud se jedná o položku menu, získají se data z databáze podle ní. Pokud se jedná o přístup k osamostatněnému obsahu, získá se obsah rovnou podle slugu.
6.7 Uživatelé Nejlepším způsobem pro uchování informací o lidech přicházejících do styku s CMS je vytváření uživatelských účtů a profilů. Každý člověk má k dispozici jeden účet, který ho zastupuje v prostředí CMS. Díky tomu je člověk okamžitě identifikován a je jasné, co může a nemůže dělat.
Obrázek 17: Metoda zpracovávající formulář pro přidání nové skupiny uživatelů
40
Profil Pro každého uživatele představuje jeho vlastní profil něco jako podpis. V profilu jsou uchovány důležité informace pro komunikaci a díky němu se uživatel může dostat i do samotného CMS. Primárním účelem profilu je identifikace každého uživatele. Díky profilu dokážeme z jednoduchého podpisu zjistit všechna dostupná data o uživateli. Slouží také jako uživatelův zástupce. Skupiny Každý uživatel je zařazen do své skupiny, podle definice zařazení uživatelů. Není vhodné, aby zákazník obchodu mohl dělat totéž jako jeho správce. Proto existují různé druhy skupin, pro které jsou nadefinována přístupová nastavení a oprávnění k provádění akcí. Z uživatelovy skupiny je tedy hned jasné, k čemu je oprávněn. Historie Pokud se uživatel rozhodne k provedení některé z dostupných akcí, je jeho počínání zaznamenáno do historie. To umožňuje snadno dohledat změny každého článku nebo menu. Taková evidence se zobrazuje měsíc dozadu, ale lze ji dohledat až do spuštění stránek. Nejvhodnější použití je hlavně pro CMS s více uživateli oprávněnými spravovat stránky. Spolu s historií akcí se eviduje ještě historie přihlášení uživatelů. V těch to záznamech se uchovávají data o času, IP adrese a user agentovi uživatele.
41
7 Testování Po dokončení implementace se projekt přesouvá do fáze testování a sledování. Testování probíhalo na vývojovém serveru, kde se simulovala běžná činnost CMS. Při testování se využíval nástroj Tracy, který umožňuje sledovat trvání dotazů na databázi a načítání stránky. Tabulka 3: Statistika eliminace chyb jednotlivými postupy testování
Popis procesu
Průměrný počet nalezených chyb
Testování samotné komponenty
11
Testování komponenty v kontextu celého
1-2
systému Počet chyb objevených po spuštění
0-1
produkční verze
Testování funkčnosti probíhá dvěma hlavními způsoby. Prvním způsobem je testování komponent zvlášť bez sledování toho, jak ovlivní ostatní. To slouží hlavně pro otestování komponenty jako celku. Druhým způsobem je testování CMS jako celku, kdy se pozoruje, jaký vliv má komponenta na ostatní části CMS. Při testování celého CMS se objevují chyby, na které by narážel návštěvník stránek, zatímco při testování oddělených komponent se odhalují chyby, na které by narazil uživatel CMS.[3] Jednou z dalších možností, jak testovat již napsaný kód, je psát pro něj takzvané testy. Tuto metodu jsem ovšem nezvolil pro její časovou náročnost. V budoucnu se spolu s rozšiřováním a zvětšováním systému bude využívat pomoc takzvaných testerů, kteří budou procházet CMS a testovat všechny jeho možnosti. Chyby a problémy, které naleznou, budou následně reportovat k jejich opravení.
7.1 Provozní údaje Systém pro správu obsahu je již nyní používán na několika webech, na kterých můžeme sledovat statistiky jejich návštěvnosti, počty objednávek, ale také chyby, které se objevují při procházení stránek návštěvníky.
42
Obrázek 18: Návštěvnost vybraných internetových stránek
Momentálně se CMS využívá pro chod pěti internetových stránek a jednoho internetového obchodu. Všechny tyto projekty jsou plně funkční a slouží pro komerční účely, takže kladou vysoké nároky na opravy chyb a úpravy související s rozvojem stránek. Tabulka 4: Různé statistiky získané z internetových stránek využívajících CMS
Popis
Průměrný měsíční výsledek
Počet varování a upozornění
12
Počet závažných chyb
0
Počet oprav v rámci vývoje
4
Počet úprav vyžádaných zákazníkem
6
Počet objednávek za měsíc
4
Návštěvnost
1450
43
8 Další vývoj CMS Vývoj systému pro správu obsahu se nezastaví ani po dokončení mé bakalářské práce. Již nyní jsou naplánovány úpravy pro vylepšení funkcí a prostředí CMS. Dalo by se říct, že vývoj CMS je nekonečný proces. Někdy se najde něco, co nefunguje úplně správně, a někdy se prostě objeví nové technologie.
8.1 Newsletter Každé prosperující internetové stránky potřebují propagaci. Tu lze řešit několika způsoby. Jednou z možností propagace jsou e-mailové zprávy. Může se jednat o nevyžádanou poštu, nebo o zprávy odesílané lidem, kteří se přihlásili k jejich odběru. Ze všech těchto důvodů je vhodné mít po ruce propracovaný systém odesílání zpráv. Tento systém bude sbírat e-mailové adresy pomocí modulu, který je bude ukládat do databázové tabulky. Pro adresy bude možné tvořit vlastní skupiny, protože každý uživatel si může vyžádat jiný typ zpráv. Každý uživatel bude mít také k dispozici možnost zobrazit zprávu přímo na stránkách, ze kterých byla odeslána, a možnost odhlásit se z odběru. Samotná tvorba e-mailové zprávy se bude dělit na dvě části. První část bude pracovat s ručně vytvořenou šablonou, která se bude následně odesílat. Druhá část bude automatická a bude pracovat s produkty z obchodu. Tyto produkty se pomocí zadaných id nahrají do předpřipravené šablony a ta se následně bude moci odeslat.
8.2 Moduly Aktuální verze CMS nabízí uživateli omezený počet modulů, což způsobuje dodatečné úpravy po spuštění stránek. Proto jsou již navržené moduly, o které bude CMS rozšířeno. Tyto moduly budou připraveny pro již existující komponenty, ale i pro komponenty, které budou v rámci vývoje vznikat. Moduly budou vytvořeny podle již navržené struktury tak, aby bylo možné je využívat i ve starších verzích CMS. To znamená, že vývoj nových modulů ovlivní všechny starší internetové stránky.
44
Tabulka 5: Seznam modulů určených pro další vývoj
Název modulu
Parametry
Popis
Kontakty
category, contact
Modul pro výpis kontatů z kategorie nebo jednoho kontaktu
Top produkty
category
Nejlepší produkty z kategorie
Jeden článek
article
Zobrazení jednoho článku
Kategorie e-shopu
žádné
Výpis všech povolených kategorií z obchodu
Newsletter
group
Sběr e-mailových adres
8.3 Interní zprávy Pro případ komunikace mezi správci CMS mohou sloužit úkoly, které však nedokážou nahradit plnohodnotnou komunikaci. Pro případ takové komunikace budou sloužit interní zprávy. Tyto zprávy se budou chovat podobně jako e-maily, jen s tím rozdílem, že se budou vyskytovat pouze v uzavřeném systému CMS. Uživatel bude mít možnost zprávu napsat a přečíst si všechny odeslané nebo doručené zprávy. Upozornění na nové zprávy se bude zobrazovat v již vytvořené ikoně pro notifikace, stejně jako je to například u nových objednávek.
8.4 Mobilní aplikace Jako rozšíření na další platformy bude sloužit mobilní aplikace, pro kterou je již připravené komunikační rozhraní. Tato aplikace zvýší mobilitu CMS a použitelnost pro uživatele. Systém pro mobilní aplikace bude vyžadovat nainstalované rozšíření pro internetový obchod. Aplikace nainstalovaná v mobilním zařízení uživatele bude sloužit jako grafické uživatelské rozhraní. Musí být schopná zobrazit uživateli data získaná z CMS ve srozumitelné formě. Dále mu musí poskytnout možnost reagovat na dění v CMS. 45
Aplikace bude nabízet několik sekcí s daty. Základní obrazovka bude obsahovat jednoduché informace o stavu e-shopu. Dále bude k dispozici zobrazení pro kategorie, produkty a objednávky. Poslední částí budou rozšířené informace o stavu e-shopu. Mobilní část musí být odolná a robustní, protože do ní již bude mít přístup obyčejný uživatel. Je důležité, aby byl minimalizovaný počet vstupů od uživatele. Nejlepší možností je vyřešení vstupu tlačítkem. To ale není vždy možné. Například první spuštění bude vyžadovat zadání unikátních dat pro CMS. Komunikace s CMS bude probíhat pomocí zasílání požadavků na jeho URL. Tam takový požadavek rozezná objekt pro mobilní aplikaci a zpracuje ho. Součástí požadavku musí být i klíč k ověření. Každý požadavek mobilní aplikace bude vyžadovat návratovou hodnotu s daty nebo s chybou.
8.5 Importy dat Pro zvláštní případy přenášení obsahu z jednoho CMS do druhého bude sloužit komponenta pro import dat. Tato komponenta bude zpracovávat soubory vygenerované pomocí exportů z jiných CMS, převádět je zpět a ukládat je do databáze. Bude přitom využívat články, galerie a produkty. Díky tomu bude mít uživatel k dispozici jednoduchou a rychlou zálohu dat. Další částí importu dat bude možnost čtení obsahu z jiných stránek. Může se jednat o RSS zprávy, ale i o prosté přečtení HTML kódu a importování dat z přednastavených dat. Uživatel si bude moct nastavit parametry takového čtení, kdy si přizpůsobí, co chce z obsahu stránek získávat, a následně bude moct vytvářet z takového obsahu články.
46
9 Závěr Jako každý projekt procházel i ten můj svým životním cyklem. Začal analyzováním požadavků a končil implementací a testováním. Celá práce by se dala rozdělit do dvou fází, z nichž každá má svá specifika. Tyto fáze lze nazvat návrh a vývoj. Z jejich názvů je zřejmé, čemu se která fáze věnovala. Paralelně s veškerou prací na projektu navíc vznikala textová zpráva o celém průběhu. Při tvorbě projektu jsem musel vytvářet analýzy a využívat metodiky tvorby softwaru. Díky tomu jsem získal větší povědomí o softwarovém inženýrství. Asi nejvíce ze všech schopností, které jsem využíval při tvorbě projektu, se zlepšilo moje programování. Díky tomu, že jsem s kódem přicházel do každodenního styku, jsem získal schopnost lépe analyzovat dlouhý kód a přemýšlet v globálním měřítku. Pro zhodnocení celé práce je potřeba se na ní podívat z širšího hlediska. Z důvodu, že se projekt již dostal do produkční fáze, by mělo celkové hodnocení brát v potaz i reakce uživatelů. Když vezmu v úvahu komentáře lidí, kteří přicházejí se systémem do každodenního styku, a přidám své poznatky získané při návrhu, vývoji a testování, mohu prohlásit, že celý systém je zdařilý. Systém obsahuje více možností a funkcí, než bylo prvotně plánováno, a ve většině případů plně vyhovuje uživateli. To však neznamená, že je práce hotová. Jak jsem zmínil v osmé kapitole, systém pro správu obsahu je nutné dále rozvíjet a upravovat tak, aby byl konkurenceschopný a udržitelný.
47
Seznam použité literatury 1. BRTNÍČEK, Michal. Jak na dobré uživatelské rozhraní (UI) [online]. 2013, [cit. 2016-05-16]. Dostupné z: http://blog.meebio.cz/clanek/168/jak-na-dobreuzivatelske-rozhrani-ui/ 2. ČEGAN, Lukáš. Vývoj webových aplikací v PHP a NetBeans. Pardubice: Univerzita Pardubice, 2015. ISBN 978-80-7395-858-9. 3. CIRKL, Tomáš. 5 nástrojů pro testování výkonu vaší stránky [online]. 2014, [cit. 2016-05-16]. Dostupné z: http://www.wplama.cz/5-nastroju-pro-testovani-vykonuvasi-stranky/ 4. DOMES, Martin. SEO: jednoduše. Brno: Computer Press, 2011. Naučte se za víkend (Computer Press). ISBN 978-80-251-3456-6. 5. GASSTON, Peter. Moderní web. Překlad Ondřej Baše. Brno: Computer Press, 2015. ISBN 978-80-251-4345-2. 6. GRUDL, David. Nette Framework: zvyšte svoji produktivitu [online]. 2009, [cit. 2016-05-16]. Dostupné z: https://www.zdrojak.cz/clanky/nette-framework-zvystesvoji-produktivitu/ 7. HOPKINS, Callum. PHP okamžitě. Brno: Computer Press, 2014. ISBN 978-80251-4196-0. 8. MYSLÍN, Josef. Scrum: průvodce agilním vývojem softwaru. Brno: Computer Press, 2016. ISBN 978-80-251-4650-7. 9. PATTON, Jeff. User story mapping: discover the whole story, build the right product. ISBN 978-1-4919-0490-9. 10. SACHS, Sybille. a Edwin. RÜHLI. Stakeholders matter: a new paradigm for strategy in society. New York: Cambridge University Press, 2011. ISBN 9780521196390. 11. SCHWARTZ, Baron. MySQL profesionálně: optimalizace pro vysoký výkon. Brno: Zoner Press, 2009. ISBN 978-80-7413-035-9. 12. SHARKIE, Craig a Andrew FISHER. Responzivní webdesign: okamžitě. Brno: Computer Press, 2015. ISBN 978-80-251-4384-1. 13. ŠOCHOVÁ, Zuzana a Eduard KUNCE. Agilní metody řízení projektů. Brno: Computer Press, 2014. ISBN 978-80-251-4194-6. 14. SOMMERVILLE, Ian. Softwarové inženýrství. Brno: Computer Press, 2013. ISBN 978-80-251-3826-7. 48
15. STEPHENS, Ryan K., Ronald R. PLEW a Arie JONES. Naučte se SQL za 28 dní: [stačí hodina denně]. Brno: Computer Press, 2010. ISBN 978-80-251-2700-1.
49
Seznam obrázků Obrázek 1: Návrh funkčnosti notifikací pro uživatele .................................................... 12 Obrázek 2: Architektura MVC ....................................................................................... 14 Obrázek 3: Ukázka chybové stránky generované pomocí Tracy ................................... 15 Obrázek 4: Ukázka vývojového prostředí v NetBeans IDE ........................................... 16 Obrázek 5: Ukázka formuláře generovaného pomocí Bootstrapu .................................. 18 Obrázek 6: Responzivní design uživatelského rozhraní ................................................. 20 Obrázek 7: Přihlašovací formulář ................................................................................... 21 Obrázek 8: Vzhled layoutu s obsahem CMS .................................................................. 22 Obrázek 9: Formulář pro tvorbu článků ......................................................................... 23 Obrázek 10: Seznam obrázků uložených v galerii .......................................................... 24 Obrázek 11: Ukázka seznamu úkolů .............................................................................. 26 Obrázek 12: Seznam objednávek a jejich barevné odlišení ............................................ 29 Obrázek 13: Náhled produktů internetového obchodu ................................................... 31 Obrázek 14: Diagram popisující životní cyklus modulu ................................................ 35 Obrázek 15: Zdrojový kód funkce pro seřazení modulů podle jejich pozic ................... 36 Obrázek 16: Zdrojový kód formuláře sloužícímu pro přidání zboží do košíku.............. 38 Obrázek 17: Metoda zpracovávající formulář pro přidání nové skupiny uživatelů ....... 40 Obrázek 18: Návštěvnost vybraných internetových stránek........................................... 43
50
Seznam tabulek Tabulka 1: Seznam presenterů v administrátorské části ................................................. 34 Tabulka 2: Seznam dostupných modulů v administrátorské části .................................. 37 Tabulka 3: Statistika eliminace chyb jednotlivými postupy testování ........................... 42 Tabulka 4: Různé statistiky získané z internetových stránek využívajících CMS ......... 43 Tabulka 5: Seznam modulů určených pro další vývoj .................................................... 45
51
Seznam použitých zkratek CMS – content management system – systém pro správu obsahu internetových stránek SCRUM – metodologie agilního vývoje softwaru SMS – Short message service – služba zasílající krátké textové zprávy po mobilní síti PHP – Hypertext Preprocesor – skriptovací programovací jazyk MVC – Model view controller – softwarová architektura, rozdělující data, logiku a uživatelské rozhraní HTML – HyperText Markup Language – jazyk používaný pro tvorbu webových stránek OS – Operační systém FTP – File Transfer Protocol – protokol pro přenos souborů LAMP – Linux Apache MySQL PHP – sada svobodného softwaru WAMP – sada svobodného softwaru CSS – Cascading Style Sheets – jazyk pro popis způsobu zobrazení dokumentů UI – user interface – uživatelské rozhraní XML – Extensible Markup Language – značkovací jazyk PC – personal computer – osobní počítač URL – Uniform Resource Locator – řetězec znaků sloužící k adresaci zdrojů na internetu SEO – Search Engine Optimization – optimalizace informací pro internetové vyhledávače MB – Megabyte – jednotka určující množství dat PDO – PHP Data Objects – rozhraní pro práci s SQL databází JSON – JavaScript Object Notation – javascriptový datový formát UTF – Unicode Transformation Format – způsob kódování znaků RSS – Rich Site Summary – jeden z rodiny XML formátů SQL – Structured Query Language – standardizovaný strukturovaný dotazovací jazyk
52
Přílohy 1 Obsah přiloženého CD
Bakalářská práce ve formátu PDF
Zdrojové kódy celé aplikace
53