ˇ e vysok´e uˇcen´ı technick´e v Praze Cesk´ Fakulta elektrotechnick´a Katedra poˇc´ıtaˇc˚ u
Bakal´aˇrsk´a pr´ace
Aukˇ cn´ı syst´ em internetov´ e reklamy Martin Mates
Vedouc´ı pr´ace: Pavel Stupka
Studijn´ı program: Softwarov´e technologie a management, Bakal´aˇrsk´ y Obor: Web a multimedia 9. ˇcervna 2009
iv
v
Podˇ ekov´ an´ı R´ad bych podˇekoval sv´emu vedouc´ımu Pavlovi Stupkovi, ˇze se ochotnˇe ujal m´eho t´ematu. D´ale dˇekuji Davidovi Grudlovi za jistˇe zdlouhav´ y a n´aroˇcn´ y v´ yvoj PHP frameworku Nette a cel´emu Nette f´oru za trpˇeliv´e ˇreˇsen´ı m´ ych pot´ıˇz´ı pˇri tvorbˇe aplikace.
vi
vii
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem pr´aci vypracoval samostatnˇe a pouˇzil jsem pouze podklady uveden´e v pˇriloˇzen´em seznamu. Nem´am z´avaˇzn´ y duvod proti uˇz´ıv´an´ı tohoto ˇskoln´ıho d´ıla ve smyslu §60 Z´akona ˇc. 121/2000 Sb.,o pr´avu autorsk´em, o pr´avech souvisej´ıc´ıch s pr´avem autorsk´ ym a o zmˇen´ach nˇekter´ ych z´akon´ık˚ u (autorsk´ y z´akon).
V Praze dne 8. 6. 2009
.............................................................
viii
Abstract The main goal of this thesis is partial insight into an internet marketing and implementation of auction application for internet ads. This software enables users to buy or sell ad space on their web pages. Users can close deals by means of auction or by fixed price sale. The first part contains main types of on-line ads and the most significant ad companies in the Czech market. Thesis also includes a search engine optimization and defines some key terms. The second part of the thesis describes implementation of the application using PHP technology. Implementation part includes early analysis and selection of the appropriate framework. The most attention is paid to the chosen framework Nette and its architecture.
Abstrakt Hlavn´ım c´ılem t´eto pr´ace je ˇc´asteˇcn´e nahl´ednut´ı do internetov´eho marketingu a implementace aukˇcn´ıho syst´emu pro internetovou reklamu. Tento syst´em umoˇzn ˇuje nab´ızet reklamn´ı prostor na internetov´ ych str´ank´ach a jeho zakoupen´ı formou aukce ˇci prodeje za pevnou cenu. Prvn´ı ˇc´ast zahrnuje hlavn´ı typy on-line reklamy a nejv´ yznamnˇejˇs´ı reklamn´ı sluˇzby na ˇcesk´em internetu. Pr´ace se tak´e dot´ yk´a optimalizace pro vyhled´avaˇce a definuje kl´ıˇcov´e pojmy. Druh´a ˇc´ast pr´ace se vˇenuje implementaci aukˇcn´ıho syst´emu pomoc´ı technologie PHP. Pozornost je vˇenov´ana poˇca´teˇcn´ı anal´ yze syst´emu a v´ ybˇeru vhodn´eho frameworku. Implementaˇcn´ı ˇca´st pr´ace se zamˇeˇruje pˇrev´aˇznˇe na vybran´ y framework Nette a na jeho architekturu.
ix
x
Obsah ´ 1 Uvod
1
2 Internetov´ a reklama a marketing u n´ as 2.1 Platba za zobrazen´ı - PPV . . . . . . . . . . . . . . . . . . 2.2 Kontextov´a reklama a platba za kliknut´ı – PPC . . . . . . 2.2.1 Google AdSense a Google AdWords . . . . . . . . . 2.2.2 Seznam.cz a Sklik . . . . . . . . . . . . . . . . . . . 2.2.3 Syst´em ETARGET . . . . . . . . . . . . . . . . . . 2.2.4 Centrum.cz, Atlas.cz a syst´em adFox . . . . . . . . 2.3 Optimalizace pro vyhled´avaˇce – SEO . . . . . . . . . . . . 2.3.1 On-page faktory . . . . . . . . . . . . . . . . . . . . 2.3.2 Off-page faktory . . . . . . . . . . . . . . . . . . . . 2.3.3 Hodnocen´ı str´anek vyhled´avaˇci – PageRank, S-rank 2.4 Rozhoduj´ıc´ı faktory pro internetovou reklamu . . . . . . . 2.4.1 PageRank . . . . . . . . . . . . . . . . . . . . . . . 2.4.2 S-rank . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.3 Zamˇeˇren´ı str´anky . . . . . . . . . . . . . . . . . . . 2.4.4 N´avˇstˇevnost str´anky . . . . . . . . . . . . . . . . . 2.4.5 Alexa rank . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
3 3 4 4 5 5 5 6 6 6 6 7 7 7 7 8 8
. . . . . . . .
9 9 9 10 10 11 11 11 12
. . . .
15 15 16 16 16
3 Anal´ yza a n´ avrh 3.1 Deklarace z´amˇeru . . . . . . . . . . . . . . . . 3.2 Vymezen´ı rozsahu a funkc´ı – hranice syst´emu 3.3 Dom´enov´ y model . . . . . . . . . . . . . . . . 3.4 Pˇr´ıpady uˇzit´ı . . . . . . . . . . . . . . . . . . 3.5 Relaˇcn´ı model datab´aze . . . . . . . . . . . . 3.6 Architektura aplikace - MVC . . . . . . . . . . 3.6.1 MVC paradox . . . . . . . . . . . . . . 3.7 Diagram tˇr´ıd . . . . . . . . . . . . . . . . . . 4 Pouˇ zit´ e technologie 4.1 XHTML - Extensible HyperText Markup 4.2 CSS - Cascading Style Sheets . . . . . . 4.3 PHP - Hypertext Preprocessor . . . . . . 4.4 V´ ybˇer vhodn´eho PHP Frameworku . . . xi
. . . . . . . .
. . . . . . . .
. . . . . . . .
Language . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . .
. . . . . . . .
. . . .
. . . . . . . .
. . . .
. . . . . . . .
. . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . .
. . . . . . . . . . . . . . . .
. . . . . . . .
. . . .
xii
OBSAH
4.5 4.6 4.7
4.4.1 Zend framework . . . . 4.4.2 Symfony . . . . . . . . 4.4.3 CakePHP . . . . . . . 4.4.4 Nette framework . . . 4.4.5 Koneˇcn´e rozhodnut´ı . MySQL . . . . . . . . . . . . 4.5.1 Datab´azov´a vrstva dibi JavaScript . . . . . . . . . . . 4.6.1 jQuery framework . . . AJAX . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
17 17 17 18 18 18 19 19 19 20
5 Implementace 5.1 Programov´an´ı v PHP 5 a Nette . . . . . . . . . . . . . . . . . . . 5.2 Ladˇen´ı aplikac´ı v Nette . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Architektura aplikace v Nette . . . . . . . . . . . . . . . . . . . . 5.3.1 Model – vyuˇzit´ı dibi datab´azov´e vrstvy . . . . . . . . . . . 5.3.2 View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.3 Presenter . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.3.1 F´aze v´ ykonn´a . . . . . . . . . . . . . . . . . . . . 5.3.3.2 F´aze zmˇen vnitˇrn´ıch stav˚ u . . . . . . . . . . . . . 5.3.3.3 F´aze vykreslovac´ı . . . . . . . . . . . . . . . . . . 5.3.3.4 Ukonˇcen´ı ˇcinnosti . . . . . . . . . . . . . . . . . . 5.3.4 Komponenty . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Bˇeh aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5 Bezpeˇcnost aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.1 Oˇsetˇren´ı vstupu . . . . . . . . . . . . . . . . . . . . . . . . 5.5.1.1 Tvorba formul´aˇr˚ u v Nette . . . . . . . . . . . . . 5.5.1.2 SQL injection . . . . . . . . . . . . . . . . . . . . 5.5.1.3 Cross-Site Scripting – XSS . . . . . . . . . . . . . 5.5.2 Adres´aˇrov´ y pr˚ uchod . . . . . . . . . . . . . . . . . . . . . 5.6 V´ ybˇer n´azvu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7 Uˇzivatelsk´e rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . 5.7.1 Grafick´a podoba aplikace . . . . . . . . . . . . . . . . . . . 5.8 Vybran´a zaj´ımav´a ˇreˇsen´ı . . . . . . . . . . . . . . . . . . . . . . . 5.8.1 Vytvoˇren´ı n´ahledu internetov´e str´anky . . . . . . . . . . . 5.8.2 Vyuˇzit´ı JavaScriptov´eho uˇzivatelsk´eho rozhran´ı jQuery UI 5.8.3 Vyuˇzit´ı JavaScriptov´e n´apovˇedy jQuery qTip . . . . . . . 5.8.4 Z´ısk´an´ı hodnot PageRank, S-rank, Alexa rank . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
23 23 24 24 25 25 26 26 26 27 27 27 27 28 28 28 29 29 29 30 30 30 31 31 31 32 32
6 Testov´ an´ı 6.1 Kognitivn´ı pr˚ uchod . . . . . 6.2 Akceptaˇcn´ı testy . . . . . . 6.3 Test uˇzivatelsk´eho rozhran´ı . 6.3.1 V´ ysledky testov´an´ı . 6.4 Testov´an´ı validity . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
35 35 35 35 36 36
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
OBSAH 6.5
xiii Testov´an´ı zobrazen´ı v r˚ uzn´ ych prohl´ıˇzeˇc´ıch . . . . . . . . . . . . . . . . .
37
7 Z´ avˇ er 39 7.1 Doporuˇcen´ı pro pokraˇcov´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . 40 8 Seznam pouˇ zit´ ych zkratek
41
Literatura
43
A UML diagramy
45
B Zdrojov´ e k´ ody
47
C Uˇ zivatelsk´ a pˇ r´ıruˇ cka C.1 Registrace . . . . . . . . . . C.2 Pˇrid´an´ı str´anky pro reklamu C.3 Vytvoˇren´ı nov´e nab´ıdky . . ´ cast na aukci/prodeji . . . C.4 Uˇ
53 53 53 54 54
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
D Instalaˇ cn´ı pˇ r´ıruˇ cka 55 D.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 D.2 Poˇzadavky na server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 E Obsah pˇ riloˇ zen´ eho CD
57
xiv
OBSAH
Seznam obr´ azk˚ u 2.1
Distribuce PageRanku odkazov´an´ım internetov´ ych str´anek mezi sebou.[5]
7
3.1
P˚ uvodn´ı Model-View-Controller architektura.[12] . . . . . . . . . . . . .
13
4.1
Velk´ y test framework˚ u serveru root.cz[10] . . . . . . . . . . . . . . . . . .
21
5.1 5.2 5.3 5.4 5.5 5.6
Model-View-Presenter architektura v Nette Frameworku.[12] ˇ Zivotn´ ı cyklus presenteru.[13] . . . . . . . . . . . . . . . . . Logo aukˇcn´ıho syst´emu. . . . . . . . . . . . . . . . . . . . . Grafick´a podoba v´ ypisu aukc´ı. . . . . . . . . . . . . . . . . . Uk´azka v´ ybˇeru data pomoc´ı jQuery UI. . . . . . . . . . . . . Uk´azka JavaScriptov´e n´apovˇedy jQuery qTip. . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
33 33 33 33 33 33
A.1 A.2 A.3 A.4 A.5 A.6
Dom´enov´ y model aukˇcn´ıho syst´emu. . . . Use case diagram nepˇrihl´aˇsen´eho uˇzivatele. Use case diagram pˇrihl´aˇsen´eho uˇzivatele. . Datab´azov´ y model aukˇcn´ıho syst´emu. . . . Diagram tˇr´ıd - vrstva controll. . . . . . . . Diagram tˇr´ıd - vrstva model. . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
46 46 46 46 46 46
xv
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
xvi
´ U ˚ SEZNAM OBRAZK
Seznam tabulek 5.1
Uk´azka vybran´ ych filtr˚ u ˇsablon. . . . . . . . . . . . . . . . . . . . . . . .
xvii
26
xviii
SEZNAM TABULEK
Kapitola 1 ´ Uvod Pojem internetov´ y marketing a optimalizace pro vyhled´avaˇce jsou v dneˇsn´ı dobˇe velmi ˇcasto skloˇ novan´e pojmy. St´ale v´ıce obchodn´ık˚ u se spol´eh´a na experty v tomto mlad´em oboru a uˇz d´avno je pryˇc doba, kdy se vˇse toˇcilo jen kolem samotn´e tvorby internetov´ ych aplikac´ı a jej´ı grafick´e u ´pravy. Z tohoto d˚ uvodu stoup´a popt´avka po sluˇzb´ach, umoˇzn ˇuj´ıc´ıch efektivn´ı propagaci a zviditelnˇen´ı v kl´ıˇcov´ ych vyhled´avaˇc´ıch na naˇsem trhu, jako jsou Google a Seznam. C´ılem t´eto pr´ace je ˇc´asteˇcn´e nahl´ednut´ı do problematiky internetov´eho marketingu a implementov´an´ı aplikace, kter´a umoˇzn´ı zakoupen´ı ˇci draˇzbu zpˇetn´ ych odkaz˚ u a obr´azkov´e reklamy tzv. banner˚ u. Tato pr´ace tak´e zodpov´ı ot´azku, proˇc m´a n´akup zpˇetn´ ych odkaz˚ u smysl a proˇc se uˇzivatel˚ um vyplat´ı za nˇe platit. Internetov´ ym marketingem se zab´ yv´a prvn´ı ˇca´st pr´ace. Shrnuje z´akladn´ı typy reklamy, platebn´ı modely a nejv´ yznamnˇejˇs´ı reklamn´ı syst´emy na ˇcesk´em trhu. Tato ˇca´st se tak´e dot´ yk´a optimalizace pro vyhled´avaˇce a definuje nˇekter´e d˚ uleˇzit´e pojmy jako PageRank, S-rank ˇci Alexa rank. Dalˇs´ı kapitoly se vˇenuj´ı implementaci samotn´e aplikace, jej´ı u ´vodn´ı anal´ yze, realizaci a n´asledn´emu testov´an´ı. Byla vyuˇzita technologie PHP ale i mnoho dalˇs´ıch, coˇz je podrobnˇe rozebr´ano v kapitole 4. Velk´a pozornost je tak´e vˇenov´ana v´ ybˇeru vhodn´eho frameworku a srovn´an´ı aktu´alnˇe nejpouˇz´ıvanˇejˇs´ıch. Implementaˇcn´ı ˇca´st pr´ace se op´ır´a z velk´e ˇca´sti o zvolen´ y framework Nette a jeho inovace, kter´e pˇrin´aˇs´ı. V´ ysledn´a aplikace vyuˇz´ıv´a celou ˇradu modern´ıch ˇreˇsen´ı z r˚ uzn´ ych zdroj˚ u. Nejzaj´ımavˇejˇs´ım z nich byla tak´e vˇenov´ana pozornost. Mluv´ıme napˇr´ıklad o vytvoˇren´ı n´ahledu str´anky, ˇci vyuˇzit´ı nˇekter´ ych velmi uˇziteˇcn´ ych JavaScriptov´ ych knihoven pro n´apovˇedu ˇci vylepˇsen´ı uˇzivatelsk´eho rozhran´ı. V z´avˇeru je cel´a aplikace testov´ana z r˚ uzn´ ych hledisek, z nichˇz je nejv´ıce prostoru vˇenov´ano testov´an´ı s uˇzivateli a optimalizaci pro nejrozˇs´ıˇrenˇejˇs´ı prohl´ıˇzeˇce.
1
2
´ KAPITOLA 1. UVOD
Kapitola 2 Internetov´ a reklama a marketing u n´ as Internetov´ y marketing nebo tak´e on-line marketing je u n´as velmi ˇsirok´ y pojem. Obecnˇe lze ˇr´ıci, ˇze se jedn´a o veˇsker´e marketingov´e aktivity, kter´e prob´ıhaj´ı prostˇrednictv´ım internetu a maj´ı za c´ıl tzv. konverzi. Konverze m˚ uˇze b´ yt pˇriveden´ı n´avˇstˇevn´ıka na str´anky, odesl´an´ı popt´avkov´eho formul´aˇre ˇci n´akup v internetov´em obchodu. Pokud nahl´edneme do historie on-line marketingu, zjist´ıme, ˇze je velmi kr´atk´a. Jeˇstˇe pˇred nˇekolika lety byla nejvˇetˇs´ı zbran´ı obr´azkov´a reklama tzv. bannery. Dnes internet nab´ız´ı mnoho marketingov´ ych moˇznost´ı a t´eto problematice jsou vˇenov´any cel´e publikace.
2.1
Platba za zobrazen´ı - PPV
Pojem PPV (Pay Per View), v pˇrekladu platba za zobrazen´ı, se objevuje pˇrev´aˇznˇe v souvislosti s bannerovou reklamou. Cena takov´e reklamy se jednoduˇse odv´ıj´ı od poˇctu jej´ıho zobrazen´ı na str´ance. Toto je jeden z nejstarˇs´ıch model˚ u placen´ı za internetovou reklamu v˚ ubec. Cena za PPV se obvykle ud´av´a za tis´ıc zobrazen´ı, neboli CPT (Cost Per Thousand). Cena d´ale z´avis´ı na zamˇeˇren´ı internetov´e str´anky a tak´e na tzv. m´ıˇre prokliku1 (CTR – Click Through Rate). M´ıra prokliku se u bannerov´e reklamy pohybovala kolem 1%, dnes je to pˇribliˇznˇe 0,06 - 0,1%. To je nejsp´ıˇse hlavn´ı d˚ uvod, proˇc je tento model zastaral´ y a vyuˇz´ıv´a se ˇc´ım d´al t´ım mˇenˇe. Tento fenom´en je naz´ yv´an bannerov´a slepota a jedn´a se o podvˇedom´e ignorov´an´ı obr´azkov´e reklamy. Bylo tak´e zjiˇstˇeno, ˇze uˇzivatel´e mnohem ˇcastˇeji klikaj´ı na statick´e obr´azky neˇz na pohybliv´e animace. M˚ uˇzeme se tak´e setkat s term´ınem PPT (Pay Per Time) v doslovn´em pˇrekladu – platba za ˇcas. V takov´em pˇr´ıpadˇe plat´ı zadavatel reklamy napˇr´ıklad za mˇes´ıc zobrazen´ı reklamy. Tento zp˚ usob m˚ uˇze b´ yt v nˇekter´ ych pˇr´ıpadech v´ yhodnˇejˇs´ı, pokud nen´ı pˇresnˇe 1
Pod´ıl n´ avˇstˇevn´ık˚ u, kteˇr´ı klikli na reklamu, ud´avan´ y v procentech.
3
´ REKLAMA A MARKETING U NAS ´ KAPITOLA 2. INTERNETOVA
4
zn´ama n´avˇstˇevnost str´anky a nebylo by snadn´e urˇcit, za jakou dobu by doˇslo k urˇcit´emu poˇctu zobrazen´ı. V´ yhoda tohoto syst´emu spoˇc´ıv´a ve velmi snadn´e implementaci. Staˇc´ı pouze zobrazovat bannery a poˇc´ıtat jejich naˇcten´ı ˇci zaznamen´avat dobu jejich platnosti.
2.2
Kontextov´ a reklama a platba za kliknut´ı – PPC
Kontextov´a reklama a PPC (Pay Per Click) jsou dva zd´anlivˇe odliˇsn´e pojmy. V praxi jdou ale ruku v ruce a jejich kombinace dnes tvoˇr´ı jednu z nejmocnˇejˇs´ıch marketingov´ ych strategi´ı na internetu. Jako kontextov´a reklama se oznaˇcuj´ı reklamn´ı sdˇelen´ı vkl´adan´a do str´anek v kontextu k jejich obsahu. V´ yraznˇe se tak zvyˇsuje jejich m´ıra prokliku. Zde uˇz hovoˇr´ıme o tzv. c´ılen´e reklamˇe, kter´a mnohem v´ıce zas´ahne c´ılovou skupinu n´avˇstˇevn´ık˚ u. Kontextovou reklamu poprv´e masivnˇe vyuˇzila spoleˇcnost Google v roce 1998. Vyhled´avaˇc v kontextu s poloˇzen´ ym dotazem zobrazil vhodn´e inzer´aty. Pojem kontextov´a reklama proto b´ yv´a ˇcasto spojov´an s vyhled´avaˇci. PPC se d´a povaˇzovat za druh´ y stupeˇ n kontextov´e reklamy. V´ yhoda platby za kliknut´ı je zˇrejm´a, inzerent plat´ı aˇz ve chv´ıli, kdy na svou str´anku pˇrivede potencion´aln´ıho z´akazn´ıka. Jelikoˇz n´avˇstˇevn´ıci pˇrich´azej´ı z kontextov´e reklamy, je v´ıce pravdˇepodobn´e, ˇze najdou to co hledaj´ı, dojde tedy k dosaˇzen´ı marketingov´eho c´ıle. V dneˇsn´ı dobˇe jde do tohoto modelu aˇz tˇretina vˇsech financ´ı vyˇclenˇen´ ych na on2 line reklamu a existuj´ı velmi dobˇre zpracovan´e implementace od nejv´ yznamnˇejˇs´ıch vyhled´avaˇc˚ u na naˇsem trhu. Cena za kliknut´ı u kontextov´e reklamy se odv´ıj´ı hlavnˇe od konkurence dan´eho kontextu a kl´ıˇcov´ ych slov3 . U velmi konkurenˇcn´ıch obor˚ u, jako napˇr´ıklad tvorba internetov´ ych str´anek, jsou ochotni inzerenti zaplatit aˇz 20 Kˇc za jedno kliknut´ı. Cena, jakou jsou inzerenti ochotni zaplatit, tak´e ovlivˇ nuje poˇrad´ı jejich reklamy vzhledem k ostatn´ım.
2.2.1
Google AdSense a Google AdWords
Spoleˇcnost Google je ve svˇetˇe rozhodnˇe nejv´ yznamnˇejˇs´ı spoleˇcnost´ı v oblasti kontextov´e ˇ PPC reklamy. Cesk´a republika je jednou z velmi m´ala zem´ı, kde se Google dˇel´ı o toto prvenstv´ı s jinou spoleˇcnost´ı - s vyhled´avaˇcem Seznam. Google AdWords se zab´ yv´a inzerc´ı zobrazovanou v kontextu s v´ ysledky vyhled´av´an´ı vyhled´avaˇce Google. V tomto pˇr´ıpadˇe plat´ı inzerenti pˇr´ımo spoleˇcnosti Google. AdSense je oproti tomu novˇejˇs´ı syst´em zamˇeˇren´ y na ˇsirok´e spektrum partnersk´ ych internetov´ ych str´anek a m˚ uˇze zobrazovat reklamu prakticky kdekoli, kde to jej´ı provozovatel zaˇr´ıd´ı. Zde jde velk´a ˇca´st penˇez inzerenta vlastn´ıkovi str´anek, na kter´ ych bylo na reklamu kliknuto. 2 3
V´ yzkum spoleˇcnosti MarketingSherpa’s, leden 2006.[16] Kontextov´ a reklama se zamˇeˇruje na urˇcit´a slova nebo slovn´ı spojen´ı, kter´ ym ˇr´ık´ame kl´ıˇcov´ a slova.
´ REKLAMA A PLATBA ZA KLIKNUT´I – PPC 2.2. KONTEXTOVA
5
V obou pˇr´ıpadech jde o nejv´ıce propracovan´ y syst´em kontextov´e reklamy u n´as a obˇe tyto sluˇzby slouˇz´ı jako velmi siln´ y n´astroj on-line marketingu ve svˇetˇe. Je tak´e moˇzn´e jejich propojen´ı se sluˇzbou Google Analytics4 .
2.2.2
Seznam.cz a Sklik
Seznam byl jeden z prvn´ıch ˇcesk´ ych vyhled´avaˇc˚ u, kter´ y kombinoval vyhled´av´an´ı s katalogem firem, zpravodajstv´ım, televizn´ım programem, pˇredpovˇed’´ı poˇcas´ı, e-mailem a ˇradou dalˇs´ıch sluˇzeb. Google tyto sluˇzby sice tak´e nab´ız´ı, ale jsou pro uˇzivatele v´ıce skryt´e. V ˇza´dn´em pˇr´ıpadˇe nechci zpochybˇ novat kvalitu sluˇzeb vyhled´avaˇce Seznam, nicm´enˇe jeho popularitˇe znaˇcnˇe nahr´ala ˇrada skuteˇcnost´ı. Mnoho lid´ı si dodnes mysl´ı, ˇze je Seznam jedin´ y a ten nejspr´avnˇejˇs´ı vyhled´avaˇc a b´ yv´a ˇcasto synonymem internetu. Je to zp˚ usobeno pˇrev´aˇznˇe malou internetovou vzdˇelanost´ı ˇcesk´eho obyvatelstva. K tomuto postaven´ı jen pˇrisp´ıv´a fakt, ˇze je Seznam nastaven jako domovsk´a str´anka v mnoha firm´ach a internetov´ ych kav´arn´ach. Seznam m´a sv˚ uj vlastn´ı syst´em PPC kontextov´e reklamy s n´azvem Sklik, kter´ y je pˇr´ımou konkurenc´ı Google AdWords. Reklama se tedy zobrazuje s v´ ysledky vyhled´av´an´ı. Tuto sluˇzbu rozhodnˇe nelze pˇrehl´ıˇzet, jelikoˇz je Seznam nejvyuˇzivanˇejˇs´ım vyhled´avaˇcem u n´as. V praxi se ˇcasto kombinuje kontextov´a reklama od Seznamu s tou od Googlu.
2.2.3
Syst´ em ETARGET
ˇ e republice je bezesporu ETARGET. Tˇret´ı nejv´ yznamnˇejˇs´ı spoleˇcnost´ı v oblasti PPC v Cesk´ Na rozd´ıl od sv´ ych dvou nejvˇetˇs´ıch konkurent˚ u nem´a ETARGET k dispozici ˇza´dn´e vyhled´av´an´ı ani port´al5 . Poskytovatel t´eto sluˇzby vsadil na kvalitn´ı partnersk´e weby, mezi kter´e patˇr´ı velmi v´ yznamn´e a navˇstˇevovan´e servery. Jmenujme napˇr´ıklad zive.cz, idnes.cz nebo nova.cz. Tento syst´em se snaˇz´ı konkurovat sluˇzbˇe Google AdSene a jeho hlavn´ı filosofi´ı je snaha o zobrazen´ı reklamy na velmi d˚ uvˇeryhodn´ ych m´ıstech.
2.2.4
Centrum.cz, Atlas.cz a syst´ em adFox
Dalˇs´ım hr´aˇcem na poli PPC reklamy u n´as je syst´em adFox poskytovan´ y spoleˇcnost´ı Centrum Holdings, kter´a vznikla roku 2008 slouˇcen´ım dvou spoleˇcnost´ı Atlas.cz a NetCentrum. Spojily se tak dva v´ yznamn´e port´aly centrum.cz a atlas.cz. Tato f˚ uze byla reakc´ı na siln´e postaven´ı spoleˇcnost´ı Seznam a Google na naˇsem trhu. Tato sluˇzba se v´ıce podob´a sluˇzbˇe Google AdSense, tedy zobrazov´an´ı na str´ank´ach partner˚ u a rozdˇelov´an´ı provize. Oproti syst´emu ETARGET nedisponuje adFox kvalitn´ımi referencemi a reklama se zobrazuje sp´ıˇse na m´enˇe d˚ uvˇeryhodn´ ych str´ank´ach. 4
Sluˇzba poskytuj´ıc´ı komplexn´ı statistiky n´avˇstˇevnosti a dalˇs´ı sluˇzby jako napˇr´ıklad statistiku kl´ıˇcov´ ych slov, pˇres kter´ a n´ avˇstˇevn´ıci pˇrich´ azej´ı nebo mˇeˇren´ı doby, kterou uˇzivatel´e tr´av´ı na str´ank´ach. 5 Internetov´ a str´ anka, kter´ a ˇcasto slouˇz´ı jako domovsk´a str´anka a sdruˇzuje mnoho aktu´aln´ıch informac´ı a sluˇzeb na hlavn´ı str´ ance.
6
´ REKLAMA A MARKETING U NAS ´ KAPITOLA 2. INTERNETOVA
Aˇckoli tato sluˇzba nen´ı bez v´ yznamu, s pˇr´ıchodem konkurenˇcn´ıho syst´emu Sklik, popularitˇe ETARGETu a poˇceˇstˇen´ı syst´emu Google AdSense jej´ı postaven´ı velmi utrpˇelo a nad´ale kles´a. AdFox nepˇrin´aˇs´ı oproti konkurenci ˇza´dn´e v´ yhody jen je jednou z m´ala alternativ.
2.3
Optimalizace pro vyhled´ avaˇ ce – SEO
Optimalizace pro vyhled´avaˇce (SEO - Search Engine Optimization) b´ yv´a ˇcasto u ´plnˇe ’ zamˇen ˇov´ana s internetov´ ym marketingem. Nen´ı to tak velk´a chyba, nebot SEO je vedle kontextov´e reklamy hlavn´ı pil´ıˇr on-line marketingu. Jedn´a se o ˇcinnosti, d´ıky kter´ ym stoup´a pozice internetov´e str´anky ve v´ ysledc´ıch vyhled´av´an´ı na urˇcit´a slovn´ı spojen´ı. O t´eto pozici rozhoduje cel´a ˇrada faktor˚ u, kter´e m˚ uˇzeme ˇclenit do dvou skupin: off-page a on-page. Problematika optimalizace pro vyhled´avaˇce je tak obs´ahl´a, ˇze pˇresahuje r´amec t´eto pr´ace, proto pouze shrnu nejd˚ uleˇzitˇejˇs´ı skuteˇcnosti, kter´ ych se dot´ yk´a implementovan´a aplikace.
2.3.1
On-page faktory
Do t´eto kategorie ˇrad´ıme vˇse, co se pˇr´ımo vyskytuje na internetov´e str´ance. Mluv´ıme zde o kvalitˇe psan´eho textu, mnoˇzstv´ı odkaz˚ u vedouc´ıch na extern´ı str´anky, spr´avn´e struktuˇre zdrojov´eho k´odu, metadatech, spr´avnˇe zvolen´ ych nadpisech, titulc´ıch str´anek a podobnˇe. Kvalifikovan´a firma, jej´ımˇz oborem je SEO, se jako prvn´ı zab´ yv´a tˇemito faktory a ˇcasto se st´av´a, ˇze vytvoˇr´ı celou str´anku znovu.
2.3.2
Off-page faktory
Off-page se d´a volnˇe pˇreloˇzit jako mimo str´anku, tedy vˇsechny okolnosti, kter´e se pˇr´ımo nevyskytuj´ı na webov´e str´ance. Mezi tyto faktory patˇr´ı zejm´ena mnoˇzstv´ı extern´ıch odkaz˚ u smˇeˇruj´ıc´ıch na danou str´anku. Tyto odkazy se naz´ yvaj´ı zpˇetn´e. U zpˇetn´ ych odkaz˚ u nesledujeme jen jejich poˇcet, ale tak´e d˚ uvˇeryhodnost a zamˇeˇren´ı str´anky, na kter´e odkaz leˇz´ı. Sledujeme tak´e tzv. anchor text, tedy textov´e sdˇelen´ı odkazu. Rozd´ıl je na prvn´ı pohled zˇrejm´ y prodej kvalitn´ıch motorek“ sdˇel´ı vice neˇz ” napˇr. kliknˇete zde“. I toho si vyhled´avaˇce vˇs´ımaj´ı. ”
2.3.3
Hodnocen´ı str´ anek vyhled´ avaˇ ci – PageRank, S-rank
Vˇsechny v´ yˇse zm´ınˇen´e on-page i off-page faktory vyhled´avaˇce sleduj´ı a pˇridˇeluj´ı internetov´ ym str´ank´am urˇcit´e hodnocen´ı tzv. rank. Oba nejvˇetˇs´ı vyhled´avaˇce na naˇsem trhu maj´ı sv´a hodnocen´ı - Google m´a PageRank, Seznam S-rank.
2.4. ROZHODUJ´IC´I FAKTORY PRO INTERNETOVOU REKLAMU
7
Obˇe tyto hodnoty jsou kl´ıˇcov´e v oblasti SEO. Ovlivˇ nuj´ı pozici str´anky ve v´ ysledc´ıch vyhled´av´an´ı a tak´e jsou to ukazatele celkov´e d˚ uvˇeryhodnosti ˇci kvality. Jak Google tak Seznam pouˇz´ıvaj´ı zcela odliˇsn´e algoritmy pro v´ ypoˇcet sv´ ych rank˚ u, kompetn´ı vzorece nejsou zn´amy.
2.4
Rozhoduj´ıc´ı faktory pro internetovou reklamu
Tyto okolnosti vypl´ yvaj´ı hlavnˇe z princip˚ u optimalizace pro vyhled´avaˇce a z´akladn´ıch marketingov´ ych strategi´ı na internetu. N´asleduj´ıc´ı ˇra´dky se budou pˇr´ımo t´ ykat nejd˚ uleˇzitˇejˇs´ıch faktor˚ u ovlivˇ nuj´ıc´ıch cenu reklamy.
2.4.1
PageRank
PageRank je ˇc´ıslo od 1 do 10 a z pˇredchoz´ı podkapitoly v´ıme, ˇze je to hodnocen´ı str´anek vyhled´avaˇcem Google podle cel´e ˇrady faktor˚ u. Zde si odpov´ıme na ot´azku, proˇc m´a PageRank pro zadavatele internetov´e reklamy tak velk´ y v´ yznam. Asi hlavn´ım d˚ uvodem je syst´em pˇred´av´an´ı rank˚ u mezi str´ankami. Pokud str´anka s vysok´ ym PageRankem odkazuje na str´anku s n´ızk´ ym, pˇred´a tak ˇca´st sv´eho hodnocen´ı a slabˇe hodnocen´e str´ance to pom˚ uˇze. Google totiˇz pˇredpokl´ad´a, ˇze dobˇre hodnocen´e – d˚ uvˇeryhodn´e str´anky odkazuj´ı na kvalitn´ı materi´aly (viz obr´azek 2.1). Je tedy zˇrejm´e, ˇze cena zpˇetn´eho odkazu na str´ance se odv´ıj´ı z velk´e ˇc´asti od PageRanku.
2.4.2
S-rank
S-rank pˇredstavuje stejnˇe jako PageRank celkov´e hodnocen´ı str´anky a ud´av´a se od 0 do 100. V´ıme jen, ˇze na rozd´ıl od PageRanku je v´ıce zaloˇzen na off-page faktorech. Z´akladn´ı princip by mˇel b´ yt stejn´ y. Hodnocen´ı S-rank je druh´a nejd˚ uleˇzitˇejˇs´ı hodnota, kter´a ud´av´a kvalitu internetov´a str´anky, a pro inzerenty m´a velk´ y v´ yznam.
2.4.3
Zamˇ eˇ ren´ı str´ anky
Z hlediska reklamy je zamˇeˇren´ı internetov´e str´anky kl´ıˇcov´e. Zpˇetn´ y odkaz bude m´ıt pro vyhled´avaˇce vˇetˇs´ı v´ahu a obr´azkov´a reklama zaznamen´a mnohem vˇetˇs´ı m´ıru prokliku. Je proto velmi d˚ uleˇzit´e d˚ ukladnˇe ohraniˇcit jednotliv´e kategorie str´anek v implementovan´em aukˇcn´ım syst´emu tak, aby kaˇzd´ y web naˇsel svou kategorii a byly mezi nimi jasnˇe dan´e hranice.
8
´ REKLAMA A MARKETING U NAS ´ KAPITOLA 2. INTERNETOVA
Obr´azek 2.1: Distribuce PageRanku odkazov´an´ım internetov´ ych str´anek mezi sebou.[5]
2.4.4
N´ avˇ stˇ evnost str´ anky
Je nasnadˇe, ˇze n´avˇstˇevnost str´anky bude inzerenty velmi zaj´ımat. Str´anka s obrovskou z´akladnou pravideln´ ych n´avˇstˇevn´ık˚ u m´a tak´e velk´ y potenci´al z´ıskat vysok´ y PageRank i S-rank a bannerov´a reklama i PPC zaznamen´a v´ıce kliknut´ı. N´avˇstˇevnost str´anky s sebou ale pˇrin´aˇs´ı jeden nemal´ y probl´em. Jak ji zjistit? N´avˇstˇevnost nen´ı veˇrejnˇe dostupn´a informace a ˇcasto ji znaj´ı jen samotn´ı majitel´e ˇci spr´avci str´anek. PageRank nebo S-rank n´am o n´avˇstˇevn´ıc´ıch neˇreknou nic a my se tak mus´ıme spol´ehat na informace od inzerenta. Jedin´ y extern´ı u ´daj, kter´ y souvis´ı s n´avˇstˇevnost´ı str´anek, je tzv. Alexa rank.
2.4.5
Alexa rank
Alexa rank poskytuje kalifornsk´a spoleˇcnost Alexa Internet zaloˇzena roku 1996. Tento rank je zaloˇzen na objemu datov´eho pˇrenosu str´anky, a proto pˇr´ımo odr´aˇz´ı n´avˇstˇevnost. Tento datov´ y pˇrenos se mˇeˇr´ı pomoc´ı speci´aln´ı liˇsty, kterou maj´ı v prohl´ıˇzeˇci nainstalovanou uˇzivatel´e internetu. Alexa rank je ˇc´ıslo, jehoˇz nejniˇzˇs´ı hodnota je 1 a nejvyˇsˇs´ı se pohybuje v ˇra´dech milion˚ u. Rozd´ıl oproti jin´ ym rank˚ um je ten, ˇze ˇc´ım niˇzˇs´ı Alexa rank str´anka m´a, t´ım l´epe. Napˇr´ıklad, pokud m´a internetov´a str´anka Alexa rank 50 000 bude m´ıt mnohem vˇetˇs´ı n´avˇstˇevnost neˇz str´anka s rankem 7 000 000.
2.4. ROZHODUJ´IC´I FAKTORY PRO INTERNETOVOU REKLAMU
9
Probl´em tohoto hodnocen´ı je jistˇe jeho ˇca´steˇcn´a neobjektivnost. Ta je zp˚ usobena nerovnomˇern´ ym geografick´ ym rozloˇzen´ım uˇzivatel˚ u s nainstalovanou Alexa liˇstou. Nejv´ıce takov´ ych uˇzivatel˚ u nalezneme bezesporu ve Spojen´ ych st´atech a v z´apadn´ı Evropˇe. Dalˇs´ı nev´ yhodou jistˇe je, ˇze drtiv´a vˇetˇsina internetov´ ych uˇzivatel˚ u, kteˇr´ı nerozum´ı problematice a nezaj´ım´a je, nem´a nainstalovanou Alexa liˇstu. Tito lid´e pˇritom mohou ˇcasto pˇredstavovat c´ılovou skupinu. Spoleˇcnost Alexa Internet sice tvrd´ı, ˇze vyuˇz´ıv´a i jin´e zdroje ke zjiˇstˇen´ı n´avˇstˇevnosti, nikde vˇsak neuv´ad´ı jak´e. Pˇres vˇsechny zjevn´e nev´ yhody se Alexa rankem d´a ˇr´ıdit a m˚ uˇzeme alespoˇ n r´amcovˇe odhadnout, jak´a je n´avˇstˇevnost ciz´ı str´anky.
10
´ REKLAMA A MARKETING U NAS ´ KAPITOLA 2. INTERNETOVA
Kapitola 3 Anal´ yza a n´ avrh V t´eto kapitole se zamˇeˇr´ıme na vlastn´ı z´amˇer cel´eho syst´emu a pˇresn´e vymezen´ı jeho funkc´ı. Pro anal´ yzu byly vyuˇzity z´akladn´ı modely, kter´e popisuj´ı aplikaci jak z hlediska datov´e struktury, tak z hlediska uˇzivatele.
3.1
Deklarace z´ amˇ eru
C´ılem projektu je vytvoˇren´ı aukˇcn´ıho syst´emu bannerov´e reklamy a zpˇetn´ ych odkaz˚ u. Aplikace bude tak´e umoˇzn ˇovat prodej za pevn´e ceny. Uˇzivatel´e budou m´ıt moˇznost po registraci nab´ızet prostor na sv´ ych str´ank´ach a inzerenti, kteˇr´ı hledaj´ı str´anky pro svou reklamu, budou moci pˇrehlednˇe proch´azet nab´ıdky. Pokud uˇzivatel zv´ıtˇez´ı na aukci (jeho nab´ıdka bude nejvyˇsˇs´ı v dobˇe ukonˇcen´ı aukce), nebo reklamu zakoup´ı, budou mu zasl´any kontaktn´ı informace prodejce a naopak prodejci bude zasl´an kontakt na kupuj´ıc´ıho. Toto bude jedin´a cesta, jak se budou moci uˇzivatel´e kontaktovat mezi sebou, pokud nepoˇc´ıt´ame koment´aˇre pod nab´ıdkami. Uˇzivatel´e tedy nebudou moci snadno syst´em obej´ıt a kontaktovat se tak sami mezi sebou. Cel´ y projekt bude realizov´an jako internetov´a aplikace, kter´a pobˇeˇz´ı na serveru Apache u extern´ı hostingov´e spoleˇcnosti1 .
3.2
Vymezen´ı rozsahu a funkc´ı – hranice syst´ emu
Syst´em umoˇzn´ı uˇzivatel˚ um bezplatnou registraci a bezpeˇcn´e pˇrihl´aˇsen´ı do aplikace. Pˇrihl´aˇsen´ y uˇzivatel bude jednoznaˇcnˇe identifikovateln´ y a bude m´ıt n´asleduj´ıc´ı moˇznosti: • Proch´azen´ı a filtrace jiˇz prob´ıhaj´ıc´ıch nab´ıdek. • Zaloˇzen´ı nov´e aukce nebo prodeje za pevnou cenu a n´aslednou editaci nebo maz´an´ı. 1
Spoleˇcnost nab´ızej´ıc´ı prostor pro internetov´e str´anky na serveru s nainstalovan´ ym PHP a datab´ azov´ ym serverem.
11
´ ´ KAPITOLA 3. ANALYZA A NAVRH
12
• Pˇrid´an´ı nov´e internetov´e str´anky pro reklamu, jej´ı editace, maz´an´ı a aktualizace u ´daj˚ u. • Editace vlastn´ıho profilu a osobn´ıch u ´daj˚ u. ´ cast na aukci formou aukˇcn´ıho pˇr´ıhozu, zakoupen´ı za kup hned“ cenu nebo • Uˇ ” ´ cast na prodeji za pevnou cenu prob´ pˇrid´an´ı koment´aˇre. Uˇ ıh´a zakupov´an´ım tzv. slot˚ u2 . Syst´em bude automaticky zajiˇst’ovat: • Rozes´ıl´an´ı informaˇcn´ıch e-mail˚ u po ukonˇcen´ı aukce, pˇrehozen´ı uˇzivatele a n´akupu slotu. • Ukonˇcov´an´ı nab´ıdek po uplynut´ı jejich doby trv´an´ı. • Zjiˇst’ov´an´ı kl´ıˇcov´ ych informac´ı pro internetovou reklamu na nab´ızen´e str´ance, viz kapitola 2.4. • Automatick´e vytv´aˇren´ı n´ahledu pˇridan´ ych str´anek. Ovl´ad´an´ı syst´emu by mˇelo b´ yt intuitivn´ı a vˇsechny poloˇzky i akce budou ˇr´adnˇe pops´any formou textov´ ych instrukc´ı a n´apovˇedy pˇr´ımo v aplikaci.
3.3
Dom´ enov´ y model
Dom´enov´ y model (pˇr´ıloha A.1) je konceptu´aln´ı datov´ y model a slouˇz´ı pˇredevˇs´ım k modelov´an´ı reality. Jeho smysl spoˇc´ıv´a hlavnˇe v ucelen´ı pˇredstavy logick´ ych celk˚ u syst´emu a jejich d˚ uleˇzit´ ych atribut˚ u. Na prvn´ı pohled je zˇrejm´e, ˇze napˇr´ıklad adresa uˇzivatele nejsp´ıˇse nebude realizov´ana jako samostatn´a datab´azov´a tabulka, nebot’ je ve vztahu 1:1 s uˇzivatelem. Stejnˇe tak tˇr´ıdy n´ ahled str´ anky a obr´ azek profilu n´am ˇr´ıkaj´ı pouze, jak´e informace budou pro syst´em d˚ uleˇzit´e, ale nic o konkr´etn´ı implementaci.
3.4
Pˇ r´ıpady uˇ zit´ı
Diagramy pˇr´ıpad˚ u uˇzit´ı (pˇr´ılohy A.2 a A.3) zobrazuj´ı jednotliv´e u ´kony syst´emu a jeho chov´an´ı z hlediska uˇzivatele. Syst´em rozliˇsuje dva hlavn´ı typy akt´er˚ u, uˇzivatele pˇrihl´aˇsen´eho a nepˇrihl´aˇsen´eho. Tˇret´ım akt´erem je ˇcas. Nepˇrihl´aˇsen´ y uˇzivatel m˚ uˇze proch´azet vˇsechny nab´ıdky i zobrazovat jejich detaily, nem˚ uˇze vˇsak nijak zas´ahnout do pr˚ ubˇehu prodeje ani pˇridat koment´aˇr. Tento uˇzivatel nem´a pˇr´ıstup do ˇz´adn´ ych jin´ ych sekc´ı, m˚ uˇze se pouze pˇrihl´asit nebo registrovat. Pˇrihl´aˇsen´ y uˇzivatel jiˇz m´a zpˇr´ıstupnˇeny vˇsechny funkce syst´emu popsan´e v kapitole 3.2. Uˇzivatel je automaticky odhl´aˇsen po delˇs´ı neaktivitˇe. 2
Uˇzivatel´e mohou nab´ıdnout v´ıce stejn´ ych reklamn´ıch prostor˚ u v r´amci jedn´e nab´ıdky, kter´e oznaˇcujeme jako sloty.
ˇ ´I MODEL DATABAZE ´ 3.5. RELACN
3.5
13
Relaˇ cn´ı model datab´ aze
Relaˇcn´ı datab´azov´ y model (pˇr´ıloha A.4) pˇresnˇe popisuje strukturu datab´azov´ ych tabulek a relac´ı mezi nimi. Rozd´ıl oproti dom´enov´emu modelu je hlavnˇe z´avislost na konkr´etn´ı implementaci. Zde jiˇz mus´ıme zohledˇ novat potˇreby syst´emu, takˇze se zde objevuj´ı unik´atn´ı atributy jako id a ostatn´ı ciz´ı kl´ıˇce. Vid´ıme tak´e, ˇze v datab´azi neevidujeme n´ahled str´anky ani obr´azek profilu, nebot’ jsem se rozhodl tyto obr´azky jednoznaˇcnˇe identifikovat jejich n´azvem a ukl´adat pˇr´ımo na disk. Datovou integritu pˇritom zajiˇst’uje s´am syst´em. D´ale bych se pozastavil u slouˇcen´ı adresy a uˇzivatele do jedn´e tabulky users. Toto slouˇcen´ı je d´ano vztahem 1:1, tedy jeden uˇzivatel m´a jednu adresu, a proto nen´ı tˇreba dalˇs´ı tabulka.
3.6
Architektura aplikace - MVC
Zkratkou MVC3 se oznaˇcuje tˇr´ıvrstv´a architektura aplikac´ı, kter´a se tˇeˇs´ı obrovsk´e oblibˇe pˇrev´aˇznˇe u internetov´ ych projekt˚ u. Tuto architekturu poprv´e popsal Trygve Reenskaug v roce 1979 a vstoupil tak do dˇejin programov´an´ı jako takov´eho. Architektura MVC dˇel´ı aplikaci do tˇr´ı vrstev – model, view a controller (viz obr´azek 3.1). Aplikaˇcn´ı logiku oddˇelenou od uˇzivatelsk´eho rozhran´ı naz´ yv´ame model. Uˇzivatelsk´e rozhran´ı potom d´ale dˇel´ıme na vrstvu, kter´a obstar´av´a v´ ystup na monitor (view) a vrstvu zpracov´avaj´ıc´ı vstupy kl´avesnice a myˇsi (controller). V t´eto architektuˇre model o existenci view ˇci controlleru v˚ ubec nev´ı. View prezentuje data od modelu a ve chv´ıli, kdy uˇzivatel nˇejak zareaguje, pˇrevezme akci controller a vyˇza´d´a si od modelu nov´a data. Takto je MVC architektura ch´ap´ana vˇetˇsinou v´ yvoj´aˇr˚ u dnes. Na pap´ıˇre je vˇse v poˇra´dku, ale v praxi jsou hranice mezi jednotliv´ ymi vrstvami ˇcasto velmi nejasn´e, hovoˇr´ıme o tzv. MVC paradoxu.
3.6.1
MVC paradox
Jako pˇr´ıklad si vezmˇeme obyˇcejn´ y v´ ypis ˇcl´ank˚ u na blogu. Teorie hovoˇr´ı n´asledovnˇe: • Model m´a metodu, kter´a vr´at´ı vˇsechny ˇcl´anky (napˇr´ıklad z datab´aze). • Controller tuto metodu zavol´a a z´ıskan´ y seznam pˇred´a do view. • View se postar´a o vykreslen´ı. V praxi se ale uk´aˇze, ˇze budeme cht´ıt ˇcl´anky nav´ıc str´ankovat, ˇradit podle r˚ uzn´ ych kategori´ı, omezit jejich v´ ybˇer ˇci vypsat 10 nejˇctenˇejˇs´ıch na hlavn´ı str´ance. Toto vˇsechno jsou podle teorie MVC poˇzadavky prezenˇcn´ı logiky a model nemus´ı v˚ ubec zaj´ımat. Bylo 3
Model-View-Controller.
´ ´ KAPITOLA 3. ANALYZA A NAVRH
14
by jistˇe nelogick´e v praxi pokaˇzd´e z´ısk´avat od modelu vˇsechny ˇcl´anky a nepotˇrebn´e zahazovat. V praxi se tedy ˇcasto rezignuje nad MVC a do modelu se pˇrid´avaj´ı nejr˚ uznˇejˇs´ı metody, kter´e vracej´ı ˇcl´anky tak, jak je konkr´etnˇe poˇzaduje view. Vhodnˇejˇs´ı je tedy MVC vn´ımat obecnˇeji, jako princip maj´ıc´ı za c´ıl pˇremostit mezeru mezi lidsk´ ym ment´aln´ım modelem a modelem poˇc´ıtaˇcov´ ym, jehoˇz ide´alu zat´ım nebylo dosaˇzeno.[12] Chtˇel jsem hlavnˇe pouk´azat na skuteˇcnost, ˇze MVC architektura nen´ı v praxi ˇza´dn´ y dogmatick´ y pojem a jej´ı implementace se mohou podstatnˇe liˇsit. V implemetovan´e aplikaci proto vyuˇz´ıv´am jej´ı obdobu.
3.7
Diagram tˇ r´ıd
Diagram tˇr´ıd pˇredstavuje statick´ y pohled na syst´em. Zobrazuje zejm´ena tˇr´ıdy jako typy objekt˚ u a vztahy, kter´e mezi nimi existuj´ı. Tento diagram m˚ uˇze b´ yt ˇca´steˇcnˇe z´avisl´ y na implementaci, tedy na konkr´etn´ım programovac´ım jazyce ˇci potˇreb´ach frameworku. N´aˇs diagram tˇr´ıd je velmi specifick´ y, jelikoˇz byl pro realizaci vybr´an framework Nette (v´ıce o architektuˇre frameworku v kapitole 5). Model obsahuje v horn´ı ˇca´sti nˇekolik nejd˚ uleˇzitˇejˇs´ıch tˇr´ıd Nette, od kter´ ych dˇed´ı nebo je implementuj´ı n´ami napsan´e objekty. Pro jednoduchost byly uvedeny jen jejich n´azvy. Pro zjednoduˇsen´ı byl diagram tˇr´ıd rozdˇelen na dvˇe ˇca´sti. Prvn´ı pˇredstavuje vrstvu controll, tedy presentery a jednu komponentu aukceTable (viz pˇr´ıloha A.5). Druh´a ˇca´st pˇredstavuje model aplikace neboli tˇr´ıdy, kter´e komunikuj´ı s datab´az´ı (pˇr´ıloha A.6).
ˇ ´ID 3.7. DIAGRAM TR
Obr´azek 3.1: P˚ uvodn´ı Model-View-Controller architektura.[12]
15
16
´ ´ KAPITOLA 3. ANALYZA A NAVRH
Kapitola 4 Pouˇ zit´ e technologie V n´asleduj´ıc´ı kapitole se pokus´ım shrnout vˇsechny technologie, kter´e byly pro tvorbu syst´emu vyuˇzity. Velk´a pozornost bude tak´e vˇenov´ana v´ ybˇeru vhodn´eho PHP frameworku.
4.1
XHTML - Extensible HyperText Markup Language
Jedn´a se o znaˇckovac´ı jazyk pro tvorbu statick´ ych internetov´ ych str´anek vyvinut´ y konsorciem 1 W3C . XHTML je n´asledn´ıkem jazyka HTML, jehoˇz v´ yvoj byl ukonˇcen v roce 1999 verz´ı 4.01, a v´ıce se pˇribliˇzuje podm´ınk´am XML dokument˚ u. Tento jazyk popisuje strukturu obsahu, ale neˇr´ık´a nic o jeho koneˇcn´em vzhledu. XHTML syntaxi rozum´ı internetov´e prohl´ıˇzeˇce a veˇsker´ y i dynamick´ y obsah se nakonec pˇrevede do t´eto podoby. Rozliˇsujeme tˇri druhy XHTML dokument˚ u, neboli 2 DTD , kter´a se ud´av´a na zaˇc´atku dokumentu. ˇ e struktur´aln´ı znaˇckov´an´ı, neobsahuje ˇza´dn´e znaˇcky spojen´e • XHTML 1.0 Strict - Cistˇ s form´atov´an´ım vzhledu. Pˇredpokl´ad´a se vyuˇzit´ı spoleˇcnˇe s CSS. • XHTML 1.0 Transitional - Pˇrechodn´ y typ mezi HTML a XHTML. Povoluje atributy pro form´atov´an´ı textu a odkaz˚ u v elementu body a nˇekter´e dalˇs´ı atributy. Je vhodn´ y pro form´atov´an´ı str´anek vytv´aˇren´ ych pro starˇs´ı prohl´ıˇzeˇce. • XHTML 1.0 Frameset - Tento typ podporuje dnes jiˇz pˇrekonan´e r´amce, kter´e se hojnˇe vyuˇz´ıvaly v minulosti. V dneˇsn´ı dobˇe se jiˇz nepouˇz´ıv´a. Rozhodl jsem se ps´at pr´aci v modernˇejˇs´ım XHTML 1.0 Strict, jelikoˇz je to z technologick´eho hlediska nejˇcistˇs´ı pˇr´ıstup. Nˇekter´e prohl´ıˇzeˇce, zejm´ena Internet Explorer, pracuj´ı se starˇs´ım XHTML 1.0 Transitional v takzvan´em Quirks m´odu, kter´ y se snaˇz´ı b´ yt kompatibiln´ı s pˇredchoz´ımi verzemi HTML. To ˇcasto zp˚ usob´ı, ˇze je interpretace 1 2
Mezin´ arodn´ı konsorcium, kter´e vyv´ıj´ı webov´e snadtardy. (www.w3.org) Document Type Definition.
17
ˇ E ´ TECHNOLOGIE KAPITOLA 4. POUZIT
18
pouˇzit´ ych kask´adov´ ych styl˚ u rozd´ıln´a od jin´ ych prohl´ıˇzeˇc˚ u, kter´e tyto dokumenty vykresluj´ı ve Standards m´odu. Psan´ım dokumentu v XHTML 1.0 Strict se tedy vyhneme spoustˇe probl´em˚ u spojen´ ych s optimalizac´ı pro r˚ uzn´e internetov´e prohl´ıˇzeˇce.
4.2
CSS - Cascading Style Sheets
Jazyk kask´adov´ ych styl˚ u popisuje zp˚ usob zobrazen´ı str´anek napsan´ ych v HTML, XHTML ˇci XML jazyce. B´ yv´a um´ıstˇen v samostatn´em souboru a k dokumentu se pˇripojuje v jeho hlaviˇcce. K dokumentu m˚ uˇze b´ yt pˇripojeno v´ıce verz´ı, kaˇzd´a pro jin´e m´edium (obrazovka, tisk, PDA). Velk´ ym neˇsvarem CSS je optimalizace pro r˚ uzn´e internetov´e prohl´ıˇzeˇce, kter´e je ˇcasto interpretuj´ı rozd´ılnˇe. V´ yvoj´aˇri proto nˇekdy p´ıˇs´ı zvl´aˇstn´ı CSS napˇr´ıklad pro Internet Explorer, nebo se uchyluj´ı k nevalidn´ım praktik´am v podobˇe CSS hack˚ u.
4.3
PHP - Hypertext Preprocessor
Jedn´a se o platformovˇe nez´avisl´ y skriptovac´ı jazyk slouˇz´ıc´ı prim´arnˇe k tvorbˇe dynamick´ ych internetov´ ych str´anek. PHP skripty jsou vˇetˇsinou prov´adˇeny na stranˇe serveru a vrac´ı v´ ysledek v podobˇe XHTML, HTML ˇci XML dokumentu. Tento jazyk jsem pro tvorbu aplikace zvolil zejm´ena pro jednoduchost jeho syntaxe a podporu. Je to u n´as nejpouˇz´ıvanˇejˇs´ı jazyk pro tvorbu str´anek, i kdyˇz m´a oproti alternativ´am celou ˇradu nev´ yhod. Jmenujme napˇr´ıklad nejvˇetˇs´ı z nich a to, ˇze jazyk PHP nebyl od zaˇc´atku navrˇzen jako objektov´ y. Podpora objektov´eho programov´an´ı se objevila teprve ve verzi 5 (vyd´ano v roce 2004) a s ohledem na zpˇetnou kompatibilitu se pot´ yk´a s celou ˇradou probl´em˚ u. Dalˇs´ı nev´ yhodou je neparalelismus neboli absence programov´ ych vl´aken. Z jin´ ych programovac´ıch jazyk˚ u jmenujme napˇriklad JSP3 a jeho pˇr´ımou konkurenci ASP.NET4 . Tyto jazyky jsou velmi robustn´ı a hod´ı se na v´ yvoj aplikac´ı velk´eho rozsahu. 5 Dalˇs´ı alternativou je RoR , kter´e se u v´ yvoj´aˇr˚ u tˇeˇs´ı st´ale vˇetˇs´ı oblibˇe. Srovn´an´ı jednotliv´ ych technologi´ı je velmi oˇsemetn´e t´ema a bylo by tˇreba vˇenovat mu vˇetˇs´ı pozornost. Toto porovn´an´ı, aby mohlo b´ yt objektivn´ı, tak´e vyˇzaduje mnoho znalost´ı a zkuˇsenost´ı, kter´e si vyˇzaduj´ı d˚ ukladn´ y pr˚ uzkum. Ten by byl nad r´amec t´eto pr´ace.
4.4
V´ ybˇ er vhodn´ eho PHP Frameworku
Programov´an´ı webov´ ych aplikac´ı zaˇz´ıv´a v posledn´ı dobˇe nov´ y siln´ y trend – frameworky. Tyto frameworky se snaˇz´ı nab´ızet jiˇz hotov´a ˇreˇsen´ı ˇcast´ ych program´atorsk´ ych probl´em˚ u 3
Java Server Pages firmy Sun Microsystems Active Server Pages a framework .NET firmy Microsoft 5 Ruby on Rails - Programovac´ı jazyk Ruby dohromady s frameworkem Rails 4
´ ER ˇ VHODNEHO ´ 4.4. VYB PHP FRAMEWORKU
19
a ˇsetˇr´ı tak mnoho ˇra´dek k´odu, kter´e by musel v´ yvoj´aˇr ps´at pro kaˇzdou aplikaci znovu. 6 Tomuto pˇr´ıstupu ˇr´ık´ame DRY . Pokud budeme mluvit o PHP frameworc´ıch, budeme urˇcitˇe hovoˇrit o sadˇe skript˚ u napsan´ ych v PHP. Tˇechto framework˚ u je cel´a ˇrada od drobn´ ych knihoven aˇz po velk´e kostry aplikac´ı se svou vlastn´ı architekturou. J´a se zamˇeˇr´ım na ty nejpouˇz´ıvanˇejˇs´ı a pokus´ım se shrnout jejich klady i z´apory.
4.4.1
Zend framework
Pˇri v´ ybˇeru vhodn´eho frameworku pro internetovou aukci byl Zend prvn´ım kandid´atem. Bylo to d´ano hlavnˇe t´ım, ˇze se jedn´a o nejzn´amˇejˇs´ı framework, kter´ y je podporov´an samotn´ ymi v´ yvoj´aˇri PHP. V´ yvoj tohoto frameworku zaˇcal roku 2005 a v souˇcastn´e dobˇe je na svˇetˇe ve verzi 1.8. Zend byl od poˇca´tku stavˇen pomoc´ı modul´arn´ıch bal´ıˇck˚ u, kde maj´ı tˇr´ıdy jasnˇe strukturovan´e pojmenov´an´ı a je moˇzn´e r˚ uzn´e bal´ıˇcky pouˇz´ıvat samostatnˇe. N´avrhy tˇr´ıd jsou dˇel´any striktnˇe podle n´avrhov´ ych vzor˚ u. Je kladen d˚ uraz na to, aby si program´ator mohl tˇr´ıdy s´am rozˇsiˇrovat. Asi nejvˇetˇs´ı v´ yhoda Zend frameworku tkv´ı v obrovsk´em mnoˇzstv´ı jeho knihoven. Ty obstar´avaj´ı snad vˇsechny typick´e probl´emy od odes´ıl´an´ı e-mail˚ u pˇred editaci obr´azk˚ u,FTP pˇripojen´ı aˇz po kompletn´ı captcha7 ˇreˇsen´ı. Od Zendu mˇe odradila jeho ud´avan´a pomalost. Podle testu framework˚ u na serveru root.cz (viz obr´azek 4.1), potˇrebuje Zend pro zobrazen´ı dat z datab´aze aˇz 1s. Tato doba klesne na pˇrijateln´ ych 40-100ms aˇz po pouˇzit´ı eAcceleratoru8
4.4.2
Symfony
Dalˇs´ım frameworkem o kter´em se velmi ˇcasto hovoˇr´ı je Symfony. Tento framework se snaˇz´ı uˇsetˇrit co moˇzn´a nejv´ıce psan´ı k´odu program´atorem. Velk´a ˇca´st k´od˚ u se nach´az´ı ve zvl´aˇstn´ıch konfiguraˇcn´ıch souborech, kter´e se p´ıˇs´ı ve velmi u ´sporn´em a ˇciteln´em z´apisu zvan´em YAML9 . Jedn´a se o deklarativn´ı metodu programov´an´ı. Podle ohlasu program´ator˚ u je pr´ace v Symfony velmi produktivn´ı, ale nauˇcit se v nˇem trv´a ze vˇsech framework˚ u asi nejd´ele.
4.4.3
CakePHP
CakePHP je dalˇs´ım velik´anem na poli PHP framework˚ u. Inspiruje se hlavnˇe u Ruby on Rails, jehoˇz hlavn´ı pˇrednost´ı je pˇr´ımoˇcarost a jednoduchost. Framework se zamˇeˇruje pˇredevˇs´ım na pˇrehledn´ y a kr´atk´ y zdrojov´ y k´od a je velmi popul´arn´ı v zahraniˇc´ı. 6
Dont Repeat Yourself - Neopakuj se. Test, kter´ y se na webu pouˇz´ıv´ a ve snaze automaticky odliˇsit skuteˇcn´e uˇzivatele od robot˚ u. 8 Open-source optimalizaˇcn´ı n´ astroj pro PHP, kter´ y ukl´ad´a do cache kompilovanou podobu zdrojov´eho k´ odu a zrychluje tak jeho spouˇstˇen´ı. 9 YAML Ain’t Markup Language 7
ˇ E ´ TECHNOLOGIE KAPITOLA 4. POUZIT
20
D˚ uvodem, proˇc jsem se nakonec rozhodl Cake nevyuˇz´ıt, bylo chybˇej´ıc´ı kvalitn´ı komunitn´ı f´orum. I pˇres fakt, ˇze existuje mnoho zdroj˚ u informac´ı, bylo velmi obt´ıˇzn´e nal´ezat odpovˇedi na ot´azky, kter´e bˇehem testov´an´ı vyvst´avaly.
4.4.4
Nette framework
Nette je rozhodnˇe ze vˇsech v´ yˇse zm´ınˇen´ ych nejnovˇejˇs´ı. Veˇrejnosti byl pˇredstaven na konferenci WebExpo 200810 na pˇredn´aˇsce pˇredn´ıho ˇcesk´eho PHP program´atora Davida Grudla, kter´ y je tak´e autorem cel´eho projektu. Tento framework je jiˇz plnˇe pˇripraven vyuˇz´ıvat jmenn´ ych prostor˚ u pˇripravovan´e verze PHP 5.3. a soustˇred´ı se hlavnˇe na nedokonalosti objektov´eho programov´an´ı jazyka PHP. Zde mˇe velice zaujala pr´ace s formul´aˇri a vlastn´ı lad´ıc´ı n´astroj Nette/Debug o kter´em budu hovoˇrit v´ıce v kapitole 5.2. Tak´e mˇe velice pˇrekvapila aktivn´ı a vstˇr´ıcn´a komunita, kter´a je spojena s projektov´ ym f´orem. Takto komunita se skl´ad´a pˇrev´aˇznˇe z ˇcesk´ ych program´ator˚ u a vˇsichni jsou do projektu velice zap´alen´ı. Velk´a ˇc´ast uˇzivatel˚ u tohoto frameworku dokonce pˇreˇsla z konkurenˇcn´ıho Zend Frameworku, coˇz vypov´ıd´a o kvalit´e cel´eho projektu. Nette je nav´ıc podle velk´eho testu framework˚ u serveru root.cz jeden z nejv´ ykonnˇejˇs´ıch (obr´azek 4.1)
4.4.5
Koneˇ cn´ e rozhodnut´ı
Velmi vstˇr´ıcn´a ˇcesk´a komunita, zamˇeˇren´ı na kvalitu PHP programov´an´ı, rychlost a velmi dobr´e ohlasy mˇe nakonec pˇresvˇedˇcily, ˇze nejlepˇs´ı volba bude Nette Framework. Jelikoˇz je Nette relativnˇe nov´ y projekt, chyb´ı ˇrada knihoven, kter´ ymi disponuje jeho konkurence. Doplnˇen´ı se ani nepl´anuje, ponˇevadˇz se do Nette daj´ı velmi snadno zakomponovat jiˇz existuj´ıc´ı ˇreˇsen´ı. Bylo by to znovu psan´ı jiˇz hotov´eho a to jde proti filosofii cel´eho projektu. Rozhodl jsem se tedy spolu s Nette vyuˇz´ıvat knihovny Zend frameworku. Z´ uˇcastnil jsem se tak´e ˇskolen´ı Nette frameworku poˇr´adan´e pˇr´ımo jeho autorem – Davidem Grudlem a mus´ım ˇr´ıct, ˇze mˇe cel´ y projekt velmi zaujal.
4.5
MySQL
MySQL je datab´azov´ y syst´em, vytvoˇren´ y ˇsv´edskou firmou MySQL AB. Jde o multiplatformn´ı datab´azi. Komunikace s n´ı prob´ıh´a – jak uˇz n´azev napov´ıd´a – pomoc´ı jazyka SQL11 . Podobnˇe jako u ostatn´ıch SQL datab´az´ı se jedn´a o dialekt tohoto jazyka s nˇekter´ ymi rozˇs´ıˇren´ımi.[3] 10
Nejvˇetˇs´ı ˇcesk´ a konference o technologi´ıch a businessu na internetu. Structured Query Language - standardizovan´ y dotazovac´ı jazyk pouˇz´ıvan´ y pro pr´aci s daty v relaˇcn´ıch datab´ az´ıch. 11
4.6. JAVASCRIPT
21
MySQL je optimalizov´ano hlavnˇe na rychlost. S t´ım bohuˇzel pˇriˇsla ˇrada zjednoduˇsen´ı, jako napˇr´ıklad velmi jednoduch´e z´alohov´an´ı a aˇz v posledn´ıch letech zaˇcalo podporovat dalˇs´ı funkce jako triggery, pohledy ˇci uloˇzen´e procedury. Tento datab´azov´ y syst´em jsem zvolil hlavnˇe proto, ˇze je to volnˇe ˇsiˇriteln´ y software a tak´e pro jeho velmi velkou podporu hostingov´ ych spoleˇcnost´ı. MySQL plnˇe vyhovuje vˇsem potˇreb´am naˇs´ı internetov´e aplikace – aukˇcn´ıho syst´emu.
4.5.1
Datab´ azov´ a vrstva dibi
Dibi je datab´azov´a knihovna napsan´a v jazyce PHP. Autorem dibi je David Grudl, tedy stejn´ y ˇclovˇek co stoj´ı za cel´ ym Nette Frameworkem. Hlavn´ım pˇr´ınosem dibi je zapouzdˇren´ı PHP datab´azov´ ych funkc´ı do objektov´eho rozhran´ı s generov´an´ım v´ yjimek a tak´e sjednocen´ı z´akladn´ıch funkc´ı jako je pˇripojen´ı k datab´azi, vykon´an´ı pˇr´ıkazu a z´ısk´an´ı v´ ysledku. C´ılem t´eto datab´azov´e vrstvy je tak´e uˇsetˇrit program´atorovi pr´aci se z´apisem SQL dotaz˚ u.
4.6
JavaScript
JavaScript je objektovˇe orientovan´ y interpretovan´ y skriptovac´ı jazyk, kter´ y se z pravidla vyuˇz´ıv´a pro internetov´e str´anky. Tyto skripty jsou ˇcasto vkl´ad´any pˇr´ımo do HTML k´odu a jsou spouˇstˇeny na stranˇe klienta. JavaScript obvykle ovl´ad´a r˚ uzn´e interaktivn´ı prvky uˇzivatelsk´eho rozhran´ı nebo grafick´e efekty. Velk´ ym probl´emem JavaScriptu je jeho rozd´ıln´a interpretace a podpora v r˚ uzn´ ych prohl´ıˇzeˇc´ıch, zejm´ena ve starˇs´ıch verz´ıch Internet Exploreru nebo Opery. Tento probl´em ˇreˇs´ı z velk´e ˇc´asti JavaScriptov´e frameworky.
4.6.1
jQuery framework
Jedn´a se o velmi popul´arn´ı JavaScriptov´ y framework, kter´ y umoˇzn ˇuje pohodlnou manipulaci 12 s DOM dokumentu XHTML (umoˇzn ˇuje pracovat se selektory u ´rovnˇe CSS3). Framework obsahuje tak´e spoustu knihoven pro nejr˚ uznˇejˇs´ı druhy animac´ı ˇci ajaxov´e vol´an´ı. JQuery mˇen´ı z´apis JavaScriptu jako takov´eho a velmi ho zjednoduˇsuje. Velkou v´ yhodou je tak´e peˇclivˇe odladˇen´a kompatibilita funkc´ı pro vˇsechny zn´am´e prohl´ıˇzeˇce. Cel´ y bal´ık jQuery m´a nav´ıc velmi pˇrijatelnou velikost. Jeho komprimovan´a verze m´a necel´ ych 20KB. Hlavn´ı v´ yhodou projektu jQuery je jeho popularita. Vznik´a tak obrovsk´e mnoˇzstv´ı snadno pouˇziteln´ ych rozˇs´ıˇren´ı. Nˇekolik z nich jsem tak´e pouˇzil pro aukˇcn´ı syst´em viz kapitoly 5.8.2 a 5.8.3. 12
Document Object Model - objektovˇe orientovan´a reprezentace XML nebo (X)HTML dokumentu.
ˇ E ´ TECHNOLOGIE KAPITOLA 4. POUZIT
22
4.7
AJAX
Zkratkou AJAX13 oznaˇcujeme skupinu technologi´ı slouˇz´ıc´ıch k vytv´aˇren´ı interaktivn´ıch webov´ ych aplikac´ı, kter´e mohou komunikovat se serverem bez nutnosti znovunaˇcten´ı str´anky. Mezi komunikac´ı serveru s klientem operuje jeˇstˇe tˇret´ı JavaScriptov´a vrstva. Zat´ımco v klasick´e aplikaci kliknut´ı na odkaz automaticky vyvol´a poˇzadavek na server a vr´acen´a str´anka se automaticky zobraz´ı, v pˇr´ıpadˇe AJAXov´ ych aplikac´ı poˇzadavek vyvol´a a vr´acen´a data zpracuje klientsk´ y skript. Z pohledu webov´eho serveru jde pˇritom st´ale jen o norm´aln´ı GET nebo POST poˇzadavek HTTP.
13
Asynchronous JavaScript and XML.
4.7. AJAX
23
Obr´azek 4.1: Velk´ y test framework˚ u serveru root.cz[10]
24
ˇ E ´ TECHNOLOGIE KAPITOLA 4. POUZIT
Kapitola 5 Implementace Jak jsem jiˇz zmiˇ noval v kapitole 4, pro implementaci cel´e aplikace jsem zvolil jazyk PHP a Nette Framework. V´ yvoj aplikace v Nette je velmi specifick´ y, a proto mi jako nov´aˇckovi zabralo spoustu ˇcasu pochopen´ı celkov´e filosofie a struktury. Z tohoto d˚ uvodu bych r´ad vˇenoval nejv´ıce pozornosti pr´aci s t´ımto frameworkem a zamˇeˇril se pˇrev´aˇznˇe na zaj´ımav´e a netypick´e ˇca´sti ˇreˇsen´ı.
5.1
Programov´ an´ı v PHP 5 a Nette
Mezi hlavn´ı v´ yhody Nette frameworku patˇr´ı bezesporu jeho snaha vylepˇsit objektov´e programov´an´ı jazyka PHP 5. Jak uˇz v´ıme z kapitoly 4.3 jazyk PHP se stal objektov´ ym aˇz bˇehem sv´eho v´ yvoje, a proto trp´ı ˇradou nedokonalost´ı. Velk´ ym rozd´ılem mezi objektov´ ym jazykem a jazykem, kter´ y se objektov´ ym stal, je absence spoleˇcn´eho pˇredka vˇsech tˇr´ıd. Object Pascal deklaruje TObject, ASP.NET m´a System.Object a v Javˇe nebo Ruby stoj´ı v hierarchii nejv´ yˇse Object. Tohoto spoleˇcn´eho pˇredka pro PHP pˇrid´av´a Nette framework.[14] Vˇsechny objekty Nette aplikace dˇed´ı od tˇr´ıdy Nette/Object. Ta doplˇ nuje nˇekter´e kl´ıˇcov´e vlastnosti programovac´ımu jazyku a zlepˇsuje tak jeho celkovou kulturu. Napˇr´ıklad pˇr´ıstup k pˇredem nedeklarovan´e promˇenn´e, kter´ y b´ yv´a ˇcasto zp˚ usoben chybou v programu, nyn´ı generuje v´ yjimku. V ˇcist´em PHP toto vede pouze k jej´ımu deklarov´an´ı a chyba se v aplikaci hled´a velmi obt´ıˇznˇe. Velk´ ym zpestˇren´ım PHP objekt˚ u je tak´e vylepˇsen´ı vlastnost´ı (property), coˇz jsou speci´aln´ı ˇcleny tˇr´ıd, kter´e umoˇzn ˇuj´ı pracovat s metodami tak, jako by to byly promˇenn´e. M´am na mysli tzv. gettery a settery (viz v´ ypis k´odu 5.1). Property podporuj´ı vˇsechny modern´ı objektovˇe orientovan´e jazyky, v PHP vˇsak nejsou. Dalˇs´ı zaj´ımavou vlastnost´ı, kterou ˇcist´e PHP nem´a a pˇrid´av´a ji tˇr´ıda Nette/Object je moˇznost pˇripsat nov´e metody do jiˇz existuj´ıc´ıho objektu pomoc´ı tzv. extension method. Tu zn´ame napˇr´ıklad z tˇret´ı verze jazyka C# nebo Ruby. 25
26
KAPITOLA 5. IMPLEMENTACE
1 $obj−>c a p t i o n = ’ H e l l o World ’ ; 2 // Pˇreloˇz´ı se na $obj->setCaption(’Hello World’) 4 echo $obj−>c a p t i o n ; 5 // Pˇreloˇz´ı se na vol´ an´ı $obj->getCaption();
V´ ypis k´odu 5.1: Pˇr´ıstup k vlastnostem vylepˇsen´eho PHP objektu.[14] 1 Debug : : e n a b l e ( ) ; 2 // Inicializace Nette/Debug 4 Debug : : dump( $var ) ; 5 // Vylepˇsen´y v´ypis obsahu promˇenn´e.
V´ ypis k´odu 5.2: Uk´azka pouˇzit´ı Nette/Debug.
5.2
Ladˇ en´ı aplikac´ı v Nette
Nette Framework obsahuje velmi uˇziteˇcnou knihovnu s n´azvem Nette/Debug (nˇekdy tak´e Ladˇenka). Ta m´a na starosti zachyt´av´an´ı chyb (i fat´aln´ıch) ˇci v´ yjimek a jejich pˇrehledn´ y v´ ypis na obrazovku. Tento v´ ypis obsahuje mnoho uˇziteˇcn´ ych informac´ı pro ladˇen´ı aplikace. Hned vid´ıme, kter´ y ˇr´adek k´odu zp˚ usobil chybu a dostaneme tak´e tzv. call stack neboli v´ ypis postupn´eho vol´an´ı skript˚ u. Ladˇenka n´am tak´e vyp´ıˇse obsah vˇsech serverov´ ych promˇenn´ ych, promˇenn´ ych prostˇred´ı a HTTP hlaviˇcky. Mezi dalˇs´ı uˇziteˇcn´e vlastnosti tˇr´ıdy Debug patˇr´ı tak´e vylepˇsen´ y v´ ypis obsahu promˇenn´e (dump), kter´ y vylepˇsuje PHP funkci var_dump. V´ ypis promˇenn´e se tak v HTML prostˇred´ı neslije do jednoho ˇr´adku (viz v´ ypis k´odu 5.2).
5.3
Architektura aplikace v Nette
Nette aplikace vyuˇz´ıv´a obdobu architektury MVC, kterou naz´ yv´a MVP1 . Framework pˇrich´az´ı s velmi zaj´ımavou myˇslenkou - kaˇzd´ y odkaz je zde tot´eˇz co zavol´an´ı funkce tˇr´ıdy, kter´a pˇr´ımo komunikuje s modelem a presentuje ho v lidsky pˇrijateln´e formˇe. Odsud n´azev presenter. Presenter v Nette Frameworku m´a velmi podobnou roli jako controller v architektuˇre MVC. Vyb´ır´a pohled (view) a pˇred´av´a mu model, nebo data z modelu. Udrˇzuje stav persistentn´ıch promˇenn´ ych. A pˇredevˇs´ım zpracov´av´a reakce uˇzivatele (viz obr´azek 5.1).[12] Chtˇel bych pouk´azat zejm´ena na skuteˇcnost, ˇze uˇz se nepohybujeme v rovinˇe URL, ve kter´e jsme nejprve museli poskl´adat hypertextov´ y odkaz, pˇr´ıpadnˇe ho pˇreskupit pomoc´ı mod_rewrite2 a n´aslednˇe analyzovat. Toto vˇsechno dˇel´a framework za n´as. 1
Model-View-Presenter Modul nainstalovan´ y na serveru Apache, kter´ y umoˇzn ˇuje prov´adˇet pˇreklad URL adres pomoc´ı seznamu pravidel. 2
5.3. ARCHITEKTURA APLIKACE V NETTE
27
1 $db = d i b i : : g e t C o n n e c t i o n ( ) ; 3 // Uk´ azka jednoduch´eho v´ybˇeru 4 $ r e s u l t = $db−>s e l e c t ( ’ ∗ ’ )−>from ( ’ t a b u l k a ’ )−>where ( ’ nazev=%s ’ , ’ nazev ’ )−> fetchAll () ; 6 // V´ıcen´ asobn´y insert 7 $db−>i n s e r t ( ’ t a b u l k a ’ , $ a r r , $ a r r , $ a r r , $ a r r )−>e x e c u t e ( ) ;
V´ ypis k´odu 5.3: Uk´azka dibi z´apisu SQL.
5.3.1
Model – vyuˇ zit´ı dibi datab´ azov´ e vrstvy
I kdyˇz to nen´ı v˚ ubec nutn´e, doporuˇcuje se v aplikaci Nette vyuˇz´ıvat knihovnu dibi. Jak jsem jiˇz zmiˇ noval v kapitole 4.5.1, dibi umoˇzn ˇuje velmi jednoduch´ y a pˇrehledn´ y z´apis SQL. Ten je pak nav´ıc pˇrenositeln´ y mezi r˚ uzn´ ymi datab´azov´ ymi syst´emy (MySQL, MySQLi, PostgreSQL, SQLite, ODBC a experiment´aln´ı MS SQL, Oracle a PDO). Tato knihovna tak´e automaticky uvozuje identifik´atory a ˇretˇezce, form´atuje specifick´e datab´azov´e datov´e typy jako napˇr´ıklad datum a automaticky zajiˇst’uje escapov´an´ı vstupn´ıch ˇretˇezc˚ u. Escapov´an´ı je kl´ıˇcov´a obrana proti u ´tok˚ um na datab´azi, jako je Cross Site Scripting nebo SQL injection. Podporuje tak´e v´ıcen´asobn´ y insert, kter´ y vkl´ad´an´ı do datab´aze mnohon´asobnˇe zrychl´ı (viz v´ ypis k´odu 5.3). Model v samotn´e aplikaci pˇredstavuje 5 tˇr´ıd – Auctions, Comments, Users, Webs a Prihozy. Kaˇzd´a z nich obsahuje funkce pro manipulaci s daty sv´e datab´azov´e tabulky. Tˇr´ıda Users nav´ıc implementuje abstraktn´ı tˇr´ıdu IAuthenticator, kter´a zajiˇst’uje autentizaci uˇzivatele. Kaˇzd´a tˇr´ıda modelu si ve sv´em konstruktoru vyˇza´d´a pˇripojen´ı do datab´aze od dibi knihovny. Ta vyuˇzije u ´daje z konfuguraˇcn´ıho souboru config.ini a toto pˇripojen´ı poskytne ve form´atu objektu DibiConnection.
5.3.2
View
View, podobnˇe jako v jin´ ych frameworc´ıch, zajiˇst’uj´ı dynamick´e PHP ˇci PHTML ˇsablony. Nette se zde inspiruje v ˇsablonovac´ım syst´emu Smarty a poskytuje sv˚ uj vlastn´ı velmi podobn´ y. Jedn´a se vlastnˇe pouze o zjednoduˇsen´ı z´apisu PHP, abychom nem´ıchali v´ ykonnou ˇca´st s HTML. Tyto zjednoduˇsen´ı naz´ yv´ame v Nette filtry a obstar´av´a je tˇr´ıda CurlyBracketsFilter. Tˇemito filtry je moˇzn´e jednoduˇse zapsat jak´ ykoli cyklus, vypsat promˇenn´e ale i oznaˇcit ˇca´sti ˇsablony, kter´e se maj´ı ukl´adat do cache a mnoho dalˇs´ıho. Vybran´e filtry naleznete ˇ v tabulce 5.1. Sablony se daj´ı do sebe libovolnˇe vkl´adat a funguje zde tak´e syst´em tzv. layout˚ u, kde mohou r˚ uzn´e ˇsablony pouˇz´ıvat jinou jako sv˚ uj obal. Kaˇzd´ y vykreslovaˇc v presenteru ˇci vykresliteln´a komponenta Nette m´a pˇriˇrazenou svou ˇsablonu.
28
KAPITOLA 5. IMPLEMENTACE
Obr´azek 5.1: Model-View-Presenter architektura v Nette Frameworku.[12]
Z´ apis v curlyBrackets {$variable} {!$variable} {foreach ?} ... {/foreach} {while ?} ... {/while} {cache ?} ... {/cache}
PHP ekvivalent nebo v´ yznam ... ... cachovan´ y blok
Tabulka 5.1: Uk´azka vybran´ ych filtr˚ u ˇsablon.
5.3. ARCHITEKTURA APLIKACE V NETTE
29
ˇ Obr´azek 5.2: Zivotn´ ı cyklus presenteru.[13]
5.3.3
Presenter
Jak uˇz v´ıme z architektury MVP, presentery reaguj´ı na ud´alosti poch´azej´ıc´ı od uˇzivatele a zajiˇst’uj´ı zmˇeny v modelu nebo v pohledu. Tuto vrstvu reprezentuje v naˇs´ı implementaci celkem 9 tˇr´ıd. Ty tvoˇr´ı j´adro cel´e aplikace a jsou vlastnˇe logick´ ymi celky. Program by teoreticky mohl m´ıt pouze jeden presenter, coˇz by ale nebylo pˇr´ıliˇs elegantn´ı. Presenter RegistracePresenter.php napˇr´ıklad zajiˇst’uje vykreslen´ı registraˇcn´ıho formul´aˇre, jeho validaci i zpracov´an´ı, odesl´an´ı potvrzovac´ıho e-mailu a tak´e metodu pro potvrzen´ı uˇzivatelsk´eho u ´ˇctu. Kaˇzd´ y presenter m´a v aplikaci sv˚ uj ˇzivotn´ı cyklus (viz obr´azek 5.2). Tento cyklus se sest´av´a celkem ze ˇctyˇr f´az´ı, pˇredstavovan´ ych vol´an´ım volitelnˇe existuj´ıc´ıch metod. Jde o startup, action{Action}, beforePrepare , prepare{View}, handle{Signal}, beforeRender, render{View} a shutdown. Kaˇzd´a metoda se hod´ı na nˇeco jin´eho. Ty, kter´e maj´ı spoleˇcn´e znaky, ˇrad´ıme do spoleˇcn´ ych f´az´ı ˇzivotn´ıho cyklu.
30 5.3.3.1
KAPITOLA 5. IMPLEMENTACE F´ aze v´ ykonn´ a
Do t´eto f´aze patˇr´ı metody startup a action{Action}. Zde je prostor pro inicializace persistentn´ıch parametr˚ u a manipulaci s modelem s moˇznost´ı n´asledn´eho pˇresmˇerov´an´ı. Po tomto pˇresmˇerov´an´ı se skript ukonˇc´ı, prohl´ıˇzeˇc si vyˇza´d´a novou str´anku a skript se spust´ı znovu. Tud´ıˇz vˇsechny nepersistentn´ı promˇenn´e se ztrat´ı. Funkce startup je vyvol´ana na zaˇca´tku ˇzivotn´ıho cyklu presenteru a m˚ uˇze obsahovat napˇr´ıklad zajiˇstˇen´ı pˇripojen´ı k datab´azi ˇci inicializaci tˇr´ıdn´ıch promˇenn´ ych. Metoda action{Action} by mˇela obsahovat vykon´an´ı operac´ı, po kter´ ych m˚ uˇze n´asledovat pˇresmˇerov´an´ı. Zde m˚ uˇze napˇr´ıklad prob´ıhat automatick´e pˇresmˇerov´an´ı na jinou jazykovou verzi nebo validace vstupn´ıch parametr˚ u. Onou validac´ı m˚ uˇzeme ch´apat pˇred´an´ı dat modelu k validaci, ovˇeˇren´ı pr´av a n´asledn´e pˇresmˇerov´an´ı do patˇriˇcn´ ych m´ıst, pokud se vyskytne probl´em.[13] 5.3.3.2
F´ aze zmˇ en vnitˇ rn´ıch stav˚ u
Sem patˇr´ı metoda beforePrepare. Ta obsahuje inicializaci komponent, kter´e jsou spoleˇcn´e pro v´ıce metod (napˇr: str´ankov´an´ı, ˇrazen´ı nebo formul´aˇr). Funkce prepare{View} m´a na starosti registraci komponent pro konkr´etn´ı pohled a handle{Signal} zpracov´av´a sign´aly neboli subrequesty. T´ımto se rozum´ı komunikace se serverem pod prahem norm´aln´ıho pohledu, tedy akce, kter´e se dˇej´ı, aniˇz by se zmˇenilo view. Tato metoda je kl´ıˇcov´a pro zpracov´an´ı AJAXov´ ych poˇzadavk˚ u. 5.3.3.3
F´ aze vykreslovac´ı
V t´eto f´azi se m˚ uˇze vyskytovat metoda beforeRender, kter´a deklaruje vˇse, co maj´ı spoleˇcn´e vˇsechny vykreslovaˇce. Nemus´ıme tedy nˇekter´e spoleˇcn´e promˇenn´e r˚ uzn´ ych ˇsablon registrovat v´ıcekr´at. Dalo by se ˇr´ıci, ˇze metoda beforeRender odstraˇ nuje duplicity v k´odu. Funkce render{View} m´a na starosti vykreslen´ı konkr´etn´ıho pohledu a vˇeci s t´ım spojen´e. Mluv´ıme zde hlavnˇe o registraci promˇenn´ ych ˇsablon nebo o tvorbˇe odkaz˚ u v ˇsablon´ach. 5.3.3.4
Ukonˇ cen´ı ˇ cinnosti
Do t´eto f´aze spad´a jedin´a metoda – shutdown. Ta je vyvol´ana pˇri ukonˇcen´ı ˇzivotn´ıho cyklu presenteru. Zde m˚ uˇzeme napˇr´ıklad ukonˇcit datab´azov´e pˇripojen´ı.
5.3.4
Komponenty
Komponenta je ˇca´st aplikace, kterou je moˇzn´e opakovanˇe vyuˇz´ıvat. Sdruˇzuje dohromady nˇekter´e funkce, kter´e spolu logicky souvis´ı, a chceme je vyuˇz´ıvat na v´ıce m´ıstech aplikace. Je to dynamick´ y objekt webov´e str´anky, kter´ y nen´ı z´avisl´ y na okoln´ım obsahu a d´a se jednoduˇse volat a pouˇz´ıvat.
ˇ APLIKACE 5.4. BEH
31
Komponenta v Nette je jak´ ykoli objekt, kter´ y je potomkem tˇr´ıdy Control. Takov´ato komponenta se dok´aˇze sama vykreslit vlastn´ı ˇsablonou. V naˇs´ı aplikaci existuje jen jedna takov´a komponenta – aukceTable. Ta dok´aˇze vypsat nab´ıdky, kter´e j´ı byly pˇred´any, do pˇrehledn´e tabulky a um´ı je ˇradit podle libovoln´e kombinace sloupc˚ u.
5.4
Bˇ eh aplikace
Pˇri spuˇstˇen´ı pˇrich´az´ı jako prvn´ı ke slovu soubor index.php. Ten pouze definuje konstanty d˚ uleˇzit´e pro chod programu, jako je syst´emov´a cesta k domovsk´emu adres´aˇri ˇci adres´aˇri s knihovnami, a vol´a soubor bootstrap.php (viz v´ ypis k´odu B.1). Definice uveden´ ych konstant nen´ı poˇzadavkem Nette Frameworku, jde pouze o uˇziteˇcnou zvyklost. Kdyˇz se totiˇz sloˇzka s aplikac´ı nebo knihovnami pˇresune, bude staˇcit zmˇenit jednu cestu v souboru index.php. Soubor bootstrap.php slouˇz´ı jako zav´adˇec´ı. Je v nˇem incializace cel´eho Nette frameworku a vˇsechna potˇrebn´a konfigurace. Jako prvn´ı se vol´a tˇr´ıda loader.php, kter´a umoˇzn ˇuje automatick´e vkl´ad´an´ı vˇsech potˇrebn´ ych tˇr´ıd. V aplikaci se potom vˇsechny pouˇz´ıvan´e tˇr´ıdy volaj´ı automaticky a nen´ı proto v˚ ubec nutn´e ps´at require pˇr´ıkazy. D´ale zde nalezneme inicializaci tˇr´ıdy Nette/Debug, pˇripojen´ı do datab´aze, nastaven´ı u ´loˇzn´eho adres´aˇre pro sessions, naˇcten´ı konfigurace ze souboru config.ini a tak´e nastaven´ı routeru. Router mimo jin´e definuje v´ ychoz´ı presenter, kter´ y bude pouˇzit jako prvn´ı. Nakonec se zavol´a metoda run, kter´a celou aplikaci spust´ı.
5.5
Bezpeˇ cnost aplikace
Kaˇzd´a internetov´a aplikace mus´ı velmi db´at na bezpeˇcnost, nebot’ je dostupn´a ˇsirok´e veˇrejnosti a je zn´amo mnoho tzv. hack˚ u, kter´e mohou aplikaci uˇskodit. Mohou zp˚ usobit ztr´atu dat, neopr´avnˇen´ y pˇr´ıstup nebo p´ad cel´e aplikace.
5.5.1
Oˇ setˇ ren´ı vstupu
Jelikoˇz je jazyk HTML navrˇzen jako beztypov´ y, pouˇz´ıv´a se stejn´ y element input pro zad´an´ı e-mailu, data, jm´ena i napˇr´ıklad ˇc´ıseln´e hodnoty. Tento probl´em ˇreˇs´ı aˇz pˇripravovan´a verze HTML 5 a jej´ı nov´e typy tohoto elementu (datetime, url, email, range a dalˇs´ı). My zat´ım mus´ıme vˇsechny vstupy od uˇzivatele kontrolovat a to zejm´ena na stranˇe serveru. Kontrola ˇcasto prob´ıh´a i na stranˇe klienta v podobˇe JavaScriptu. Ta m´a tu v´ yhodu, ˇze reaguje okamˇzitˇe a negeneruje se zbyteˇcnˇe poˇzadavek na server. Pro uˇzivatele ale nen´ı probl´em JavaScript vypnout, a proto je pro n´as kl´ıˇcov´a serverov´a kontrola. Doch´az´ı tak ˇcasto k duplicitn´ı validaci, coˇz je jeden z nedostatk˚ u dneˇsn´ıho pˇr´ıstupu.
32 5.5.1.1
KAPITOLA 5. IMPLEMENTACE Tvorba formul´ aˇ r˚ u v Nette
Kontrolu vstupn´ıch dat velmi usnadˇ nuje tvorba formul´aˇr˚ u frameworku Nette. Ta um´ı formul´aˇre pˇrehlednˇe popsat, vykreslit i validovat a to jak na stranˇe klienta tak serveru. To vˇsechno v´ıce m´enˇe automaticky. O vˇsechno se star´a tˇr´ıda AppForm, kter´a disponuje velk´ ym mnoˇzstv´ım nejr˚ uznˇejˇs´ıch metod. Z´akladn´ı funkce pro generov´an´ı nejˇcastˇejˇs´ıch prvk˚ u jsou addText, addPassword, addSubmit , addTextarea a dalˇs´ı. Jejich prvn´ım parametrem je vˇzdy jednoznaˇcn´ y identifik´ator a druh´ ym text, kter´ y se vygeneruje do pˇr´ısluˇsn´eho elementu label. Kaˇzd´a z tˇechto funkc´ı vrac´ı objekt typu FormControl, jeˇz um´ı spoustu dalˇs´ıch vˇec´ı. Z tˇech n´as nyn´ı zaj´ımaj´ı jeho metody addRule, addCondition a addConditionOn, kter´e slouˇz´ı k validaci. Tyto tˇri metody se na sebe daj´ı libovolnˇe ˇretˇezit, takˇze je moˇzn´e sestavit i velmi komplikovan´a validaˇcn´ı pravidla. Tyto funkce pˇrij´ımaj´ı jako prvn´ı parametr vol´an´ı statick´e validaˇcn´ı metody, takˇze je moˇzn´e jednoduˇse pˇridat vlastn´ı. V Nette uˇz ale m´ame vˇetˇsinu potˇrebn´ ych (Form::EMAIL, Form::FILLED, FORM::MIN_LENGTH a dalˇs´ı) pˇripravenou k pouˇzit´ı. Formul´aˇr tak´e definuje metodu render, kter´a obstar´av´a jeho vykreslen´ı do ˇsablony v podobˇe HTML k´odu. Toto vykreslen´ı je moˇzn´e do velk´e m´ıry ovlivnit. Kaˇzd´ y prvek formul´aˇre definuje metody getControlPrototype a getLabelPrototype, kter´e umoˇzn ˇuj´ı pr´aci pˇr´ımo s HTML. M´ame tak´e moˇznost vykreslit formul´aˇr v ˇsablonˇe ruˇcnˇe a po ˇca´stech nebo si napsat vlastn´ı metodu render. Jednoduchost tvorby formul´aˇr˚ u demonstruje sestaven´ı registraˇcn´ıho formul´aˇre v naˇsem aukˇcn´ım syst´emu (viz zdrojov´ y k´od B.2). Tento k´od zajiˇst’uje kontrolu jak na stranˇe serveru, tak na stranˇe klienta. Klientsk´e skripty budou vygenerov´any do ˇsablony. 5.5.1.2
SQL injection
SQL injection patˇr´ı mezi nejˇcastˇejˇs´ı zneuˇzit´ı neoˇsetˇren´eho formul´aˇrov´eho vstupu. Pokud totiˇz textov´ y ˇretˇezec z formul´aˇre vkl´ad´ame pˇr´ımo do SQL pˇr´ıkazu, je moˇzn´e formul´aˇrem podstrˇcit vlastn´ı ˇca´st SQL a celkov´ y datab´azov´ y dotaz zmˇenit. Tomuto chov´an´ı lze pˇredej´ıt zejm´ena escapov´an´ım speci´aln´ıch znak˚ u v ˇretˇezc´ıch pro ’ datab´azi. Toto escapov´an´ı zajiˇst uje datab´azov´a vrstva dibi automaticky, pˇri skl´ad´an´ı SQL dotazu. 5.5.1.3
Cross-Site Scripting – XSS
Tato metoda tak´e vyuˇz´ıv´a neoˇsetˇren´ ych vstup˚ u. Nezasahuje ale do SQL syntaxe, n´ ybrˇz se snaˇz´ı aplikaci podstrˇcit vlastn´ı skript. M˚ uˇze tak uˇcinit bud’ pˇres neoˇsetˇren´ y formul´aˇr, nebo editac´ı URL. Podstrˇcen´ y skript b´ yv´a nejˇcastˇeji JavaScript, kter´ y m˚ uˇze napˇr´ıklad z´ıskat citliv´e u ´daje od uˇzivatel˚ u nebo zniˇcit celkov´ y vzhled str´anky. Pokud apliace nen´ı nijak oˇsetˇren´a, tak se tento skript spust´ı, m´ısto toho aby se jen vypsal.
´ ER ˇ NAZVU ´ 5.6. VYB
33
Obrana je opˇet jednoduch´a. Je nutn´e odfiltrov´an´ı nebezpeˇcn´ ych entit PHP funkc´ı htmlspecialchars v okamˇziku zpracov´an´ı formul´aˇre, nebo v okamˇziku v´ ypisu. To sam´e plat´ı pro promˇennou z´ıskanou metodou GET, tedy pˇr´ımo z URL adresy.
5.5.2
Adres´ aˇ rov´ y pr˚ uchod
´ Utok tohoto typu zpravidla vznik´a pˇri neopatrn´em zach´azen´ı s citliv´ ymi u ´daji v kombinaci se ˇspatnˇe nastaven´ ym webov´ ym serverem, kde m´a uˇzivatel pˇr´ıstup po cel´e adres´aˇrov´e struktuˇre. V naˇs´ı aplikaci jsou uloˇzena velmi citliv´a data v souboru /app/config.ini. Mus´ıme tedy zamezit tomu, aby mˇel uˇzivatel do t´eto sloˇzky pˇr´ıstup a nemohl si tak tento statick´ y soubor pˇreˇc´ıst napˇr´ıklad zad´an´ım cesty k souboru v internetov´e adrese. M˚ uˇzeme se bud’ spolehnout na nastaven´ı webov´eho serveru, kde bude adres´aˇrov´ y pr˚ uchod zak´az´an, ale sp´ıˇse se doporuˇcuje oˇsetˇrit citliv´e adres´aˇre souborem .htaccess. Tento soubor slouˇz´ı jako dodateˇcn´a konfigurace webov´eho serveru Apache. Staˇc´ı soubor um´ıstit do kaˇzd´eho adres´aˇre, kam chceme znemoˇznit pˇr´ıstup a vloˇzit do nˇej jedin´ y ˇr´adek: Deny from all.
5.6
V´ ybˇ er n´ azvu
Bylo nutn´e vymyslet pro cel´ y projekt n´azev. Takov´ y n´azev mus´ı jasnˇe vystihovat, o co se jedn´a a mˇel by b´ yt snadno zapamatovateln´ y. Nejprve jsem zvaˇzoval m´ıt v n´azvu slovo aukce ˇci reklama a pohr´aval jsem si s kombinac´ı r˚ uzn´ ych i cizojazyˇcn´ ych tvar˚ u. Pak jsem si ale uvˇedomil, ˇze syst´em nab´ız´ı i prodej za pevnou cenu a tak´e ˇze by se mohla aplikace v budoucnu rozˇs´ıˇrit nad r´amec internetov´e reklamy. Zvolil jsem proto n´azev, kter´ y ponech´av´a dostatek volnosti a pˇritom vystihuje podstatu syst´emu – Webdeal.
5.7
Uˇ zivatelsk´ e rozhran´ı
Pˇri tvorbˇe uˇzivatelsk´eho rozhran´ı jsem se drˇzel hlavn´ıch z´asad pro tvorbu webdesignu. ˇ Cerpal jsem z knihy Adobe Photoshop praktick´ y webdesign od Jakuba Krˇcm´aˇre a z vlastn´ıch zkuˇsenost´ı. Tyto z´asady by se daly shrnout do n´asleduj´ıc´ıch bod˚ u: • Snadno dostupn´a navigace na obvykl´em m´ıstˇe, kter´a nemˇen´ı pozici. Mus´ı b´ yt jasn´e, kde se uˇzivatel pr´avˇe nach´az´ı. • Podtrˇzen´e nen´ı nic, co nen´ı odkaz a naopak odkazy v textu jsou podtrˇzen´e. Odkazy kontrastuj´ı s bˇeˇzn´ ym textem. • Pouˇzit´ı dostateˇcnˇe vypov´ıdaj´ıc´ıch ikon. • Barevnˇe oddˇelen´a hl´aˇsen´ı syst´emu, podle druhu sdˇelen´ı.
34
KAPITOLA 5. IMPLEMENTACE • Vhodnˇe zvolen´e kontrastn´ı barvy a velikosti p´ısma. • Mus´ı b´ yt na prvn´ı pohled jasn´e, o jak´ y druh str´anky se jedn´a a co nab´ız´ı. • Logo odkazuj´ıc´ı na domovskou str´anku.
5.7.1
Grafick´ a podoba aplikace
Pro tvorbu grafiky byl pouˇzit program Adobe Photoshop CS4. Hlavn´ı snaha byla navodit d˚ uvˇeryhodn´ y vzhled s d˚ urazem na jednoduchost. Jako jedna z kontrastn´ıch barev byla zvolena ˇzlut´a, nebot’ tato barva v lidech evokuje urˇcitou tendenci k uvolnˇen´ı a celkov´e d˚ uvˇeˇre. Je to barva bohatstv´ı, kter´a naznaˇcuje, ˇze p˚ ujde o obchodov´an´ı a o pen´ıze. Tato z´asada byla dodrˇzena i pˇri tvorbˇe loga, jako symbol jsem zvolil zlat´e mince (viz obr´azek 5.3). Dalˇs´ım kl´ıˇcov´ ym prvkem aplikace je pˇrehledn´e zobrazen´ı prob´ıhaj´ıc´ıch nab´ıdek. Tyto nab´ıdky se daj´ı ˇradit podle libovoln´e kombinace sloupc˚ u vzestupnˇe i sestupnˇe. Toto je zn´azornˇeno ˇsipkami vpravo od nadpisu sloupc˚ u. Nejd˚ uleˇzitˇejˇs´ı prvky tabulky jsou opatˇreny ikonami (obr´azek 5.4).
5.8
Vybran´ a zaj´ımav´ aˇ reˇ sen´ı
Z cel´e aplikace jsem vybral nˇekolik ˇreˇsen´ı, kter´a mi pˇriˇsla zaj´ımav´a a jejich realizace nen´ı u ´plnˇe obvykl´a.
5.8.1
Vytvoˇ ren´ı n´ ahledu internetov´ e str´ anky
Pokud uˇzivatel vkl´ad´a do syst´emu novou str´anku pro reklamu, aplikace automaticky vytvoˇr´ı n´ahled cel´e str´anky neboli screenshot. Jak ale aplikace tento obr´azek z´ısk´a? Nejprve jsem se pokouˇsel naj´ıt algoritmus ˇcistˇe v PHP, kter´ y by toto zajistil. Zanedlouho jsem ale zjistil, ˇze to nen´ı moˇzn´e. K uloˇzen´ı n´ahledu se ˇcasto vyuˇz´ıv´a napˇr´ıklad vykreslovac´ı j´adro prohl´ıˇzeˇce, kter´e se PHP skriptem pouze spouˇst´ı. Dalˇs´ı moˇznost pˇredstavoval programovac´ı jazyk Perl a jeho modul ImageMagick. Vypadalo to jako sloˇzit´ y a ˇcasovˇe n´aroˇcn´ y probl´em, a tak jsem se sp´ıˇse zamˇeˇril na hled´an´ı internetov´e sluˇzby, kter´a by toto poskytovala. Takov´ ych sluˇzeb existovalo hned nˇekolik, ale vˇetˇsinou byly bud’ pomal´e, nebo z nˇejak´eho d˚ uvodu nefungovaly. Jako nejlepˇs´ı se mi zd´al server snapcasa.com, kter´ y sice jako jedin´ y vyˇzadoval registraci, zato kvalitou pˇredˇcil vˇsechny ostatn´ı. Sluˇzba nab´ız´ı zdarma 500 000 vytvoˇren´ı n´ahled˚ u mˇes´ıˇcnˇe, coˇz je v´ıce neˇz dostaˇcuj´ıc´ı. Implementoval jsem tedy tˇr´ıdu screenshot.php, kter´a um´ı odeslat poˇzadavek na server snapcasa.com a vytvoˇren´ y obr´azek st´ahnout, zmenˇsit na poˇzadovanou velikost a uloˇzit do sloˇzky /img/screenshots/. Staˇzen´ı obr´azku prob´ıh´a pomoc´ı PHP rozˇs´ıˇren´ı curl (viz zdrojov´ y k´od B.3).
´ ZAJ´IMAVA ´ RE ˇ SEN ˇ ´I 5.8. VYBRANA
35
1 < s c r i p t type=” t e x t / j a v a s c r i p t ”> 2 $( function () { 3 $ ( ” i n p u t#datumod” ) . d a t e p i c k e r ( ) ; 4 }) ; 5 s c r i p t >
V´ ypis k´odu 5.4: Inicializace grafick´eho kalend´aˇre pro v´ ybˇer data.
5.8.2
Vyuˇ zit´ı JavaScriptov´ eho uˇ zivatelsk´ eho rozhran´ı jQuery UI
Pˇri tvorbˇe formul´aˇre pro zaloˇzen´ı nab´ıdky, jsem chtˇel co nejl´epe vyˇreˇsit zad´av´an´ı data zaˇc´atku a konce. Jenˇze jak pˇrimˇet uˇzivatele, aby zadal datum v poˇzadovan´em form´atu? Chtˇel jsem opustit tradiˇcn´ı jednoduch´a ˇreˇsen´ı v podobˇe n´apovˇedy dd.mm.rrrr nebo tˇr´ı oddˇelen´ ych input˚ u. L´ıbilo se mi ˇreˇsen´ı v podobˇe mini kalend´aˇre, se kter´ ym jsem se v minulosti jiˇz mnohokr´at setkal. Hotov´e ˇreˇsen´ı nab´ıdlo zaj´ımav´e JavaScriptov´e rozˇs´ıˇren´ı napsan´e ve frameworku jQuery s n´azvem jQuery UI. Jak n´azev napov´ıd´a, nejedn´a se jen o zmiˇ novan´ y kalend´aˇr, ale o komplexn´ı sadu knihoven rozˇsiˇruj´ıc´ı grafick´e uˇzivatelsk´e rozhran´ı internetov´ ych str´anek. Knihovna nab´ız´ı opravdu mnoho. Zmiˇ nme napˇr´ıklad dialogov´a okna, r˚ uzn´e posuvn´ıky nebo dynamick´e menu. J´a jsem z knihovny pouˇzil pouze v´ ybˇer data s n´azvem datepicker. Implementace byla velmi snadn´a. Staˇcilo naˇc´ıst j´adro jQuery UI, kter´e reprezentuje skript ui.core.js a pot´e jednotliv´e moduly. Pro naˇs´ı aplikaci postaˇcil ui.datepicker.js. M˚ uˇzeme tak´e editovat pˇripojen´ y CSS soubor a zmˇenit tak vzhled cel´eho kalend´aˇre (viz obr´azek 5.5). Inicializace prob´ıh´a po naˇcten´ı cel´e str´anky jQuery syntax´ı (viz zdrojov´ y k´od 5.4).
5.8.3
Vyuˇ zit´ı JavaScriptov´ e n´ apovˇ edy jQuery qTip
QTip je dalˇs´ı velmi vydaˇren´a JavaScriptov´a knihovna postaven´a na frameworku jQuery. Umoˇzn ˇuje implementaci vyskakovac´ı n´apovˇedy v pˇekn´em grafick´em proveden´ı (obr´azek 5.6). Cel´ y projekt je k dispozici na adrese craigsworks.com/projects/qtip/, kde se tak´e nal´ez´a velmi podrobn´a a kvalitn´ı dokumentace. Pouˇzit´ı bylo opˇet snadn´e. Staˇcilo vytvoˇrit vlastn´ı qTip styl, ve kter´em jsou definov´any barvy, ohraniˇcen´ı ale i tˇreba um´ıstˇen´ı, kde se n´apovˇeda bude vzhledem k pˇripojen´emu elementu vyskytovat. Pak uˇz zb´ yvalo jen zavolat funkci qTip na vybran´ y element pomoc´ı jQuery selektoru (viz zdrojov´ y k´od B.4). Vˇsechny n´apovˇedy jsou k aplikaci pˇripojeny v souboru qtips.js. Tato forma n´apovˇedy je vyuˇzita ve formul´aˇri pro zaloˇzen´ı nov´e nab´ıdky a objasˇ nuje poloˇzky, kter´e by mohly b´ yt uˇzivatel˚ um nejasn´e.
36
5.8.4
KAPITOLA 5. IMPLEMENTACE
Z´ısk´ an´ı hodnot PageRank, S-rank, Alexa rank
Pro cenu internetov´e reklamy jsou tyto faktory kl´ıˇcov´e. Proto by nebylo moudr´e, nechat prod´avaj´ıc´ı, aby tyto hodnoty u sv´ ych str´anek uv´adˇeli sami. Jednak nemus´ı vˇedˇet, jak je zjistit, ale hlavnˇe nen´ı zaruˇceno, ˇze uveden´e u ´daje budou pravdiv´e. Proto vznikla nutnost, aby syst´em byl schopen tyto hodnoty s´am zjiˇst’ovat. Z´ısk´av´an´ı Alexa ranku se obeˇslo bez vˇetˇs´ıch pot´ıˇz´ı. Staˇcilo sestavit poˇzadavek na server data.alexa.com. Ten jako odpovˇed’ vr´at´ı soubor XML, kter´ y obsahuje mimo jin´e i n´ami poˇzadovan´ yu ´daj. PHP 5 velmi usnadnilo pr´aci s XML soubory, a proto je z´ısk´an´ı Alexa ranku z´aleˇzitost´ı jednoho ˇr´adku. Zjiˇstˇen´ı S-ranku a PageRanku uˇz bylo sloˇzitˇejˇs´ı. Podle dostupn´ ych informac´ı jsem se pokusil napsat vlastn´ı ˇreˇsen´ı, ale brzy jsem narazil na ˇradu probl´em˚ u. Bylo nutn´e simulovat poˇzadavky Google toolbaru a Seznam liˇstiˇcky. Google nav´ıc vyˇzaduje jak´ ysi kontroln´ı souˇcet, kter´ y jsem nebyl schopen z´ıskat. Nakonec jsem nalezl funkˇcn´ı ˇreˇsen´ı na str´ank´ach xrank.cz a vyuˇzil jej ve vlastn´ıch tˇr´ıd´ach SRank.php a PageRank.php.
´ ZAJ´IMAVA ´ RE ˇ SEN ˇ ´I 5.8. VYBRANA
Obr´azek 5.3: Logo aukˇcn´ıho syst´emu.
Obr´azek 5.4: Grafick´a podoba v´ ypisu aukc´ı.
Obr´azek 5.5: Uk´azka v´ ybˇeru data pomoc´ı jQuery UI.
Obr´azek 5.6: Uk´azka JavaScriptov´e n´apovˇedy jQuery qTip.
37
38
KAPITOLA 5. IMPLEMENTACE
Kapitola 6 Testov´ an´ı Pro internetov´e aplikace podobn´eho typu je testov´an´ı velmi d˚ uleˇzit´e. Pom˚ uˇze odhalit ˇradu probl´em˚ u, kter´e vznikly pˇri v´ yvoji programu a za ostr´eho provozu by mohly poˇskodit dobr´e jm´eno cel´eho projektu. Testy tak´e pomohou odhalit nestabilitu a spolehlivost syst´emu. Je nutn´e tak´e provˇeˇrit uˇzivatelsk´e rozhran´ı, zdali nen´ı nepˇrehledn´e a uˇzivatel´e se nedost´avaj´ı pˇri bˇeˇzn´ ych u ´konech do nesn´az´ı. Aplikace byla ˇzkuˇsebnˇe zprovoznˇena na internetov´e adrese www.webdeal.cz.
6.1
Kognitivn´ı pr˚ uchod
Jedn´a se o prvotn´ı formu testov´an´ı, kterou prov´ad´ı s´am v´ yvoj´aˇr na z´akladˇe stanoven´ ych sc´en´aˇr˚ u. Testov´an´ı bylo modelov´ano na uˇzivatele, kter´ y se registruje, pˇrid´a nˇekolik str´anek pro reklamu a vytvoˇr´ı na nˇe nab´ıdky. Jin´ y fiktivn´ı uˇzivatel nab´ıdky zakoup´ı a komentuje. Tento test odhalil obˇcasnou pomalou odezvu serveru snapcasa.com, na kter´ y je zas´ıl´an poˇzadavek o vytvoˇren´ı n´ahledu str´anky. Z tohoto d˚ uvodu jsem pod kl´ıˇcov´e formul´aˇre pˇridal informaci, ˇze pˇrid´av´an´ı str´anky ˇci jej´ı aktualizace m˚ uˇze trvat delˇs´ı dobu. Vˇse ostatn´ı probˇehlo bez probl´em˚ u.
6.2
Akceptaˇ cn´ı testy
Akceptaˇcn´ı testy ovˇeˇruj´ı splnˇen´ı zad´an´ı, tedy katalogu poˇzadavk˚ u z anal´ yzy. V aukˇcn´ım syst´emu byla otestov´ana pˇr´ıtomnost vˇsech funkc´ı vymezen´ ych u ´vodn´ı studi´ı.
6.3
Test uˇ zivatelsk´ eho rozhran´ı
Dalˇs´ı f´az´ı bylo testov´an´ı uˇzivatelsk´eho rozhran´ı. Testu se u ´ˇcastnilo celkem 7 osob ve vˇeku 18 aˇz 25 let. Snaˇzil jsem se oslovit respondenty r˚ uzn´eho zamˇeˇren´ı a z´amˇernˇe jsem nikomu nesdˇelil, podstatu cel´eho syst´emu. 39
´ ´I KAPITOLA 6. TESTOVAN
40
Uˇzivatel´e mˇeli za u ´kol registrovat se do syst´emu, pˇridat novou internetovou str´anku pro reklamu a n´aslednˇe na ni zaloˇzit libovolnou nab´ıdku. Mˇeli se tak´e pokusit z´ uˇcastnit ciz´ı aukce libovolnou formou. Po tomto u ´kolu ˇcekal vˇsechny u ´ˇcastn´ıky jednoduch´ y dotazn´ık: 1. L´ıb´ı se v´am celkov´a struktura syst´emu a jeho grafick´e vyznˇen´ı? 2. Ch´apete podstatu syst´emu? 3. Sch´az´ı v´am nˇejak´a kategorie internetov´e str´anky? Pokud ano jak´a? 4. Bylo pro v´as ovl´ad´an´ı syst´emu intuitivn´ı? Stalo se v´am, ˇze jste si s nˇeˇc´ım nevˇedˇel/a rady? 5. Podaˇrilo se v´am u ´kol splnit? Jak dlouho v´am to zabralo? 6. Pˇripad´a v´am pˇrehledn´e vypisov´an´ı nab´ıdek?
6.3.1
V´ ysledky testov´ an´ı
Zadan´ y u ´kol se podaˇrilo splnit vˇsem u ´ˇcastn´ık˚ um testu. V´ ysledky ale uk´azaly, ˇze je nutn´e, v´ıce informovat novˇe pˇr´ıchoz´ı uˇzivatele o smyslu cel´eho projektu a odbornˇejˇs´ıch pojmech, jako je PageRank ˇci S-rank. Nˇekteˇr´ı u ´ˇcastn´ıci si na poˇc´atku mysleli, ˇze jde o aukci bˇeˇzn´eho zboˇz´ı, jin´ı neodhalili podstatu ani po dokonˇcen´ı u ´kolu. Pˇridal jsem proto u ´vodn´ı odstavec, kter´ y shrnuje hlavn´ı u ´ˇcel aplikace a pˇridal vysvˇetlen´ı z´akladn´ıch pojm˚ u. S vyplˇ nov´an´ım formul´aˇr˚ u nemˇel nikdo ze z´ uˇcastnˇen´ ych vˇetˇs´ı probl´emy. Vˇsechny nejasnosti pomohla vyˇreˇsit JavaScriptov´a n´apovˇeda, kter´a mˇela velmi kladn´e ohlasy. Vypisov´an´ı nab´ıdek shledala vˇetˇsina u ´ˇcastn´ık˚ u jako pˇrehledn´e. Uk´azalo se vˇsak, ˇze titulek aukce nem´a moc velk´ y smysl, nebot’ se objevuje aˇz v detailu aukce a atraktivitu nab´ıdky pˇr´ıliˇs neovlivn´ı. V´ ypis titulku v hromadn´em v´ ypisu jsem povaˇzoval za redundantn´ı, ’ nebot vˇsechny kl´ıˇcov´e informace zad´av´a uˇzivatel zvl´aˇst’. Jeden testovan´ y u ´ˇcastn´ık by ocenil podrobnˇejˇs´ı filtrov´an´ı nab´ıdek. D´ıky tomuto testov´an´ı bylo tak´e odhaleno chybn´e zobrazen´ı formul´aˇr˚ u v prohl´ıˇzeˇci Safari 4 na operaˇcn´ım syst´emu Mac OS X Leopard.
6.4
Testov´ an´ı validity
Testov´an´ı validity sp´ıˇse pouze doplˇ nuje celkov´e testov´an´ı aplikace. Str´anky jsou napsan´e v nejmodernˇejˇs´ı HTML syntaxi - XHTML 1.0 Strict. Validn´ı k´od napom´ah´a optimalizaci pro r˚ uzn´e internetov´e prohl´ıˇzeˇce a je tak´e ukazatelem celkov´e kvality str´anek. Jako validaˇcn´ı n´astroj byla vyuˇzita sluˇzba pˇr´ımo od W3C konsorcia na adrese validator.w3.org. Tento test odhalil drobn´e chyby v HTML syntaxi jako napˇr´ıklad neuzavˇren´e p´arov´e tagy. Zdrojov´ y k´od str´anek je nyn´ı validn´ı podle standard˚ u W3C konsorcia a struktura str´anek je tak s´emantick´a.
´ ´I ZOBRAZEN´I V RUZN ˚ YCH ´ ˇ C ˇ ´ICH 6.5. TESTOVAN PROHL´IZE
6.5
41
Testov´ an´ı zobrazen´ı v r˚ uzn´ ych prohl´ıˇ zeˇ c´ıch
Ned´ılnou souˇc´ast´ı testov´an´ı webov´ ych aplikac´ı je jejich zobrazen´ı v r˚ uzn´ ych internetov´ ych prohl´ıˇzeˇc´ıch. Ty ˇcasto interpretuj´ı kask´adov´e styly ˇci JavaScript velmi rozd´ılnˇe a v nˇekter´ ych pˇr´ıpadech mohou u ´plnˇe znemoˇznit pr´aci se syst´emem. Kl´ıˇcov´e jsou pro aplikaci nejpouˇz´ıvanˇejˇs´ı prohl´ıˇzeˇce, kter´ ymi jsou Internet Explorer 6,7 a 8, FireFox 2 a 3, Opera 9.2, Safari 4 a Google Chrome. Ve vˇsech tˇechto prohl´ıˇzeˇc´ıch byla aplikace testov´ana na operaˇcn´ım syst´emu Windows. D´ale probˇehl test na velk´em mnoˇzstv´ı r˚ uzn´ ych prohl´ıˇzeˇc˚ u (celkem 63) pomoc´ı sluˇzby na serveru browsershots.org. Do t´eto aplikace je moˇzn´e zadat adresu str´anek a ona sama vygeneruje n´ahledy ve vybran´ ych prohl´ıˇzeˇc´ıch. Toto testov´an´ı odhalilo chybn´e zobrazen´ı formul´aˇre pro zaloˇzen´ı nab´ıdky a nefunkˇcn´ı JavaScript na skr´ yv´an´ı nˇekter´ ych jeho poloˇzek v Internet Exploreru 6 a 7. Bylo nutn´e napsat zvl´aˇstn´ı skript pro tyto prohl´ıˇzeˇce, nebot’ na element option se nedala nav´azat JavaScriptov´a ud´alost onClick a animaˇcn´ı funkce jQuery slideDown zp˚ usobovala mizen´ı formul´aˇrov´ ych prvk˚ u.
42
´ ´I KAPITOLA 6. TESTOVAN
Kapitola 7 Z´ avˇ er Hlavn´ım c´ılem pr´ace bylo vytvoˇrit aukˇcn´ı syst´em internetov´e reklamy, kter´ y by reflektoval aktu´aln´ı potˇreby. V´ ysledn´a aplikace pohodlnˇe umoˇzn ˇuje jak n´akup, tak prodej reklamn´ıho prostoru pro obr´azkovou (bannerovou) nebo textovou (zpˇetn´ y odkaz) reklamu. Pˇri poˇca´teˇcn´ı anal´ yze bylo nutn´e nahl´ednout do problematiky on-line marketingu, aby v´ ysledn´a sluˇzba mohla co nejv´ıce vych´azet vstˇr´ıc aktu´aln´ım poˇzadavk˚ um. Tento pr˚ uzkum se podaˇrilo bezezbytku splnit a aplikace nyn´ı sama zajiˇst’uje nejd˚ uleˇzitˇejˇs´ı informace o internetov´ ych str´ank´ach urˇcen´ ych pro inzerci. Podaˇrilo se tak´e zodpovˇedˇet ot´azku, z jak´ ych d˚ uvod˚ u jsou tv˚ urci str´anek ˇci inzerenti ochotni platit nemal´e ˇca´stky za zpˇetn´e odkazy. Dalˇs´ım u ´kolem byl v´ ybˇer vhodn´eho PHP frameworku pro implementaci. Prozkoumal jsem ty nejpouˇz´ıvanˇejˇs´ı a po peˇcliv´em zv´aˇzen´ı vˇsech klad˚ u i z´apor˚ u jsem zvolil ˇcesk´ y framework Nette. I kdyˇz byla pr´ace v tomto frameworku z poˇca´tku sp´ıˇse pˇr´ıtˇeˇz´ı, ve v´ ysledku Nette pr´aci velmi usnadnilo a uˇsetˇrilo mnoho ˇr´adek k´odu. Pˇri implementaci autentizace uˇzivatele ˇci tvorbˇe formul´aˇr˚ u bylo Nette obzvl´aˇstˇe uˇziteˇcn´e, nebot’ nab´ız´ı vlastn´ı funkˇcn´ı zp˚ usoby ˇreˇsen´ı. Tvorba UML diagram˚ u umoˇznila systematickou tvorbu syst´emu a pˇrinesla ucelen´ y pohled na program jiˇz na poˇc´atku v´ yvoje. Zabr´anila tak nˇekolikan´asobn´emu pˇrepisov´an´ı zdrojov´ ych k´od˚ u. Zejm´ena diagram pˇr´ıpad˚ u uˇzit´ı mi pomohl uvˇedomit si, ˇze nˇekter´e u ´kony se v aplikaci na r˚ uzn´ ych m´ıstech opakuj´ı a bylo by tedy lepˇs´ı implementovat je ve formˇe komponenty. Ta m˚ uˇze b´ yt opakovanˇe vyuˇzita na v´ıce m´ıstech aplikace. D´ıky testov´an´ı syst´emu se podaˇrilo odhalit spoustu drobn´ ych chyb, zejm´ena zobrazov´an´ı v r˚ uzn´ ych internetov´ ych prohl´ıˇzeˇc´ıch a nedostatky uˇzivatelsk´eho rozhran´ı. Vˇsechny tyto nedostatky byly u ´spˇeˇsnˇe opraveny. Grafick´a podoba aplikace se setkala s kladn´ ymi ohlasy. Celou pr´aci hodnot´ım jako velice pˇr´ınosnou hlavnˇe z hlediska novˇe nabyt´ ych znalost´ı a zkuˇsenost´ı spojen´ ych s tvorbou internetov´ ych aplikac´ı. 43
´ ER ˇ KAPITOLA 7. ZAV
44
7.1
Doporuˇ cen´ı pro pokraˇ cov´ an´ı
I kdyˇz aplikace plnˇe splˇ nuje zad´an´ı, jej´ı nasazen´ı do ostr´eho provozu bych doporuˇcil odloˇzit. Bˇehem v´ yvoje jsem se totiˇz setkal s mnoha dalˇs´ımi n´apady, jak syst´em vylepˇsit. Napˇr´ıklad uˇzivatel´e by si mohli dob´ıjet u ´ˇcty skuteˇcn´ ymi penˇezi a za nˇe uskuteˇcn ˇovat veˇsker´e transakce. Syst´em by tak´e mohl slouˇzit k draˇzbˇe jin´eho zboˇz´ı napˇr´ıklad dom´en nebo hotov´ ych projekt˚ u. Dalˇs´ı uˇziteˇcnou vˇec´ı by jistˇe bylo hodnocen´ı uˇzivatel˚ u, kter´e by vypov´ıdalo o d˚ uvˇeryhodnosti nab´ıdek.
Kapitola 8 Seznam pouˇ zit´ ych zkratek AJAX Asynchronous JavaScript and XML ASP Active Server Pages CPT Cost Per Thousand CSS Cascading Style Sheets CTR Click Through Rate DOM Document Object Model DRY Dont Repeat Yourself DTD Document Type Definition FTP File Transfer Protocol HTML HyperText Markup Language HTTP Hypertext Transfer Protocol JSP JavaServer Pages MVC Model View Controller MVP Model View Presenter ODBC Open Data Base Connectivity PDA Personal Digital Assistant PDO PHP Data Objects PHP Hypertext Preprocessor PHTML PHP HyperText Markup Language 45
46
ˇ YCH ´ KAPITOLA 8. SEZNAM POUZIT ZKRATEK
PPC Pay Per Click PPT Pay Per Time PPV Pay Per View SEO Search Engine Optimization SQL Structured Query Language UI User Interface URL Uniform Resource Locator XHTML Extensible HyperText Markup Language XML Extensible Markup Language YAML YAML Ain’t Markup Language
Literatura [1] Alexa the web information company. http://www.alexa.com/, stav z 1. 6. 2009. [2] jQuery UI - Home. http://jqueryui.com/, stav z 31. 5. 2009. [3] MySQL - wikipedie, otevˇren´a encyklopedie. http://cs.wikipedia.org/wiki/MySQL/, stav z 25. 5. 2009. [4] Nette framework forum. http://forum.nettephp.com/cs/,. [5] Pagerank - wikipedie, otevˇren´a encyklopedie. http://cs.wikipedia.org/wiki/PageRank, stav z 10. 5. 2009. [6] qtip - the jquery tooltip plugin. http://craigsworks.com/projects/qtip/, stav z 1. 6. 2009. [7] The w3c markup validation service. http://validator.w3.org/, stav z 6. 6. 2009. [8] Zjistˇete si S-Rank a PageRank a dalˇs´ı ranky. http://xrank.cz/, stav z 31. 5. 2009. [9] J. Arlow and I. Neustadt. UML 2 a unifikovan´y proces v´yvoje aplikac´ı. Computer Press, 2007. [10] P. Danˇek. Velk´ y test PHP framework˚ u: Zend, Nette, PHP a RoR. http://www.root.cz/clanky/velky-test-php-frameworku-zend-nette-php-a-ror/, stav z 20. 5. 2009. [11] D. Grudl. Mvc paradox a jak jej reˇsit. http://phpfashion.com/mvc-paradox-a-jak-jej-resit, stav z 27. 5. 2009. 47
48
LITERATURA
[12] D. Grudl. Nette framework: MVC a MVP. http://zdrojak.root.cz/clanky/nette-framework-mvc--mvp/, stav z 20. 5. 2009. [13] D. Grudl. Nette/application/presenter. http://nettephp.com/cs/nette-application-presenter, stav z 29. 5. 2009. [14] D. Grudl. Nette/Object — Nette Framework. http://nettephp.com/cs/nette-object, stav z 25. 5. 2009. [15] J. Krˇcm´aˇr. Adobe Photoshop praktick´y webdesign. Grada, 2006. [16] M. Kub´ıˇcek. Velk´y pr˚ uvodce SEO. CPress, 2008. [17] R. Pecinovsk´ y. N´avrhov´e vzory - 33 vzorov´ych postup˚ u pro objektov´e programov´ an´ı. Computer Press, 2007.
Pˇ r´ıloha A UML diagramy
49
50
ˇ ´ILOHA A. UML DIAGRAMY PR
Obr´azek A.1: Dom´enov´ y model aukˇcn´ıho syst´emu.
51
Obr´azek A.2: Use case diagram nepˇrihl´aˇsen´eho uˇzivatele.
52
ˇ ´ILOHA A. UML DIAGRAMY PR
Obr´azek A.3: Use case diagram pˇrihl´aˇsen´eho uˇzivatele.
53
Obr´azek A.4: Datab´azov´ y model aukˇcn´ıho syst´emu.
54
ˇ ´ILOHA A. UML DIAGRAMY PR
Obr´azek A.5: Diagram tˇr´ıd - vrstva controll.
55
Obr´azek A.6: Diagram tˇr´ıd - vrstva model.
56
ˇ ´ILOHA A. UML DIAGRAMY PR
Pˇ r´ıloha B Zdrojov´ e k´ ody
57
ˇ ´ILOHA B. ZDROJOVE ´ KODY ´ PR
58 1
// [ Krok 1 ]: Naˇcten´ı Nette frameworku // toto umoˇzn´ı volat vˇsechny potˇrebn´e tˇr´ıdy automaticky. // Nen´ı proto nutn´e v ˇz´ adn´e tˇr´ıdˇe aplikace uv´ adˇet require pˇr´ıkazy. r e q u i r e o n c e LIBS DIR . ’ / Nette / l o a d e r . php ’ ;
8 // [ Krok 2 ]: Konfigurace prostˇred´ı 9 // 2a) povolen´ı Nette/Debug pro lepˇs´ı zobrazen´ı chyb a ladˇen´ı aplikace 10 Debug : : e n a b l e ( ) ; 12 // 2b) naˇcten´ı konfigurace z config.ini souboru 13 Environment : : l o a d C o n f i g ( ) ; 15 // 2c) kontrola, zdali m´ a adres´ aˇr /app/temp povolen´ı z´ apisu 16 i f ( @ f i l e p u t c o n t e n t s ( Environment : : expand ( ’%tempDir%/ c h e c k ’ ) , ’ ’ ) === FALSE) { 17 throw new E x c e p t i o n ( ”Make d i r e c t o r y ’ ” . Environment : : g e t V a r i a b l e ( ’ tempDir ’ ) . ” ’ w r i t a b l e ! ” ) ; 18 } 20 21 22 23 24
// 2d) povolen´ı RobotLoaderu - umoˇzn ˇuje automatick´e includov´ an´ı potˇrebn´ych tˇr´ıd $ l o a d e r = new RobotLoader ( ) ; $ l o a d e r −>a d d D i r e c t o r y (APP DIR) ; $ l o a d e r −>a d d D i r e c t o r y ( LIBS DIR ) ; $ l o a d e r −>r e g i s t e r ( ) ;
26 // 2e) pˇripojen´ı do datab´ aze pomoc´ı dibi 27 d i b i : : c o n n e c t ( Environment : : g e t C o n f i g ( ’ d a t a b a s e ’ ) ) ; 29 // 2f ) nastaven´ı sessions a jejich u ´loˇzn´eho adres´ aˇre 30 $ s e s s i o n = Environment : : g e t S e s s i o n ( ) ; 31 $ s e s s i o n −>s e t S a v e P a t h (APP DIR . ’ / s e s s i o n s / ’ ) ; 33 // [ Krok 3 ]: Konfigurace aplikace 34 // 3a) nastav´ı pˇredn´ı controller 35 $ a p p l i c a t i o n = Environment : : g e t A p p l i c a t i o n ( ) ; 37 // [ Krok 4 ]: Nastaven´ı routeru 38 $ r o u t e r = $ a p p l i c a t i o n −>g e t R o u t e r ( ) ; 40 $ r o u t e r [ ] = new Route ( ’ i n d e x . php ’ , array ( 41 ’ p r e s e n t e r ’ => ’ Homepage ’ , 42 ’ a c t i o n ’ => ’ d e f a u l t ’ , 43 ) , Route : : ONE WAY) ; 45 $ r o u t e r [ ] = new Route ( ’
// ’ , array ( 46 ’ p r e s e n t e r ’ => ’ Homepage ’ , 47 ’ a c t i o n ’ => ’ d e f a u l t ’ , 48 ’ i d ’ => NULL 49 ) ) ; 51 // [ Krok 5 ]: Spuˇstˇen´ı aplikace 52 $ a p p l i c a t i o n −>run ( ) ;
V´ ypis k´odu B.1: Soubor bootstrap.php.
59
1 2 3 4 5 6
$form = new AppForm ( $ t h i s , ’ r e g i s t r a c e ’ ) ; $form−>addGroup ( ’ Pˇr i h l aˇs o v a c´ı u ´daje : ’ ) ; $form−>addText ( ’ l o g i n ’ , ’ l o g i n : ’ ) −>addRule ( Form : : FILLED , ’ Login mus´ı b´ y t vyplnˇe n . ’ ) −>addRule ( Form : : MIN LENGTH, ’ Minim´a ln´ı d´e l k a l o g i n u j s o u 2 znaky . ’ , 2 ) −>addRule ( Form : : MAX LENGTH, ’ Maxim´a ln´ı d´e l k a l o g i n u j e 50 znak˚ u . ’ , 50) ;
8 $form−>addPassword ( ’ h e s l o ’ , ’ h e s l o : ’ ) 9 −>addRule ( Form : : FILLED , ’ H e s l o mus´ı b´ y t vyplnˇe no . ’ ) ; 11 $form−>addPassword ( ’ h e s l o K o n t r o l a ’ , ’ h e s l o znovu : ’ ) 12 −>addRule ( Form : : FILLED , ’ K o n t r o l a h e s l a mus´ı b´ y t vyplnˇe na . ’ ) 13 −>addRule ( Form : : EQUAL, ’ K o n t r o l a h e s l a n e s o u h l a s´ı . ’ , $form [ ’ h e s l o ’ ] ) ; 15 16 17 18
$form−>addGroup ( ’ Kontaktn´ı u ´daje : ’ ) ; $form−>addText ( ’ m a i l ’ , ’ e−m a i l : ’ ) −>addRule ( Form : : FILLED , ’E−m a i l mus´ı b´ y t vyplnˇe n . ’ ) −>addRule ( Form : : EMAIL, ’ Z a d e j t e p l a t n y ´ e−m a i l . ’ ) ;
21 $form−>addGroup ( ’ K o n t r o l a p r o t i spamu : ’ ) ; 23 24 25 26 27 28 29 30
$form−>addCaptcha ( ’ c a p t c h a ’ , ’ o p iˇs t e k´o d : ’ ) −>s e t T e x t C o l o r ( Image : : rgb ( 0 , 0 , 0 ) ) −>s e t F o n t S i z e ( 1 4 ) −>s e t H e i g h t ( 2 8 ) −>setWidth ( 8 0 ) −>s e t B g C o l o r ( Image : : rgb ( 2 5 5 , 2 5 5 , 2 5 5 ) ) −>addRule ( ’ Captcha : : v a l i d a t e V a l i d ’ , ’ O p iˇs t e s p r ´a v nˇe p´ısmena z obr´a zku . ’ ) −>g e t C o n t r o l P r o t o t y p e ( )−>c l a s s ( ’ c a p t c h a ’ ) ;
V´ ypis k´odu B.2: Vytvoˇren´ı registraˇcn´ıho formul´aˇre.
ˇ ´ILOHA B. ZDROJOVE ´ KODY ´ PR
60
1 c l a s s Screenshot { 3 4
/∗ ∗ @var S t r i n g ∗ ∗/ p r i v a t e $code ;
6 7 8
public function construct () { $ t h i s −>code = ’ 5260 ’ ; }
10
p u b l i c f u n c t i o n s a v e S c r e e n s h o t ( $ u r l , $webid ) { i f ( extension loaded ( ’ c u r l ’ ) ) { $ch = c u r l i n i t ( ’ h t t p : / /www. s n a p c a s a . com/ g e t . aspx ? code= ’ . $ t h i s −>code . ’&s i z e=l&u r l= ’ . $ u r l ) ; curl setopt ( $ch , CURLOPT RETURNTRANSFER, true ) ; curl setopt ( $ch , CURLOPT BINARYTRANSFER, true ) ; $output = curl exec ( $ch ) ;
12 13 14 15 16
i f ( $output ) { $ f h = fopen (WWWDIR . ’ /img/ s c r e e n s h o t s / ’ . $webid . ’ . j p g ’ , ’w ’ ) ; f w r i t e ( $fh , $output ) ; fclose ( $fh ) ;
18 19 20 21
try { $image = Image : : f r o m F i l e (WWWDIR . ’ /img/ s c r e e n s h o t s / ’ . $webid . ’ . j p g ’ ) ; $image−>r e s i z e ( 1 0 0 , 7 5 ) ; $image−>s a v e (WWWDIR . ’ /img/ s c r e e n s h o t s /100 x75 / ’ . $webid . ’ . j p g ’ ) ; } c a t c h ( E x c e p t i o n $e ) { throw new E x c e p t i o n ( ’ N e p o d aˇr i l o s e v y t v oˇr i t s c r e e n s h o t s t r ´a n k y . Zkuste t o p o z d ˇe j i . ’ ) ; }
23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 }
r e t u r n true ; } else { throw new E x c e p t i o n ( ’ Chyba pˇr i v y t v ´a ˇr e n´ı s c r e e n s h o t u str´ anky . ’ ) ; } } else { throw new E x c e p t i o n ( ’PHP e x t e n s i o n p h p c u r l i s not l o a d e d . ’ ) ; } }
V´ ypis k´odu B.3: Tˇr´ıda screenshot.php. Vytvoˇren´ı n´ahledu str´anky.
61
1 // Definice vlastn´ıho qtip stylu 2 $ . fn . qtip . s t y l e s . cerny = { 3 padding : 5 , 4 textAlign : ’ l e f t ’ , 5 border : { 6 width : 7 , 7 radius : 5 8 }, 9 tip : ’ leftMiddle ’ , 10 name : ’ dark ’ 11 } 13 // Nav´ az´ an´ı na element input 14 $ ( ’ i n p u t#frmvytvoreniAukce −t i t u l e k ’ ) . q t i p ( { 15 c o n t e n t : ’ T i t u l e k aukce s e z o b r a z´ı v d e t a i l u v aˇs´ı nab´ıdky . N e z o b r a z u j e s e pˇr i hromadn´em v y ´ p i s u a u k c´ı . ’ , 16 show : ’ mouseover ’ , 17 h i d e : ’ mouseout ’ , 18 s t y l e : ’ cerny ’ , 19 position : { 20 corner : { 21 target : ’ rightMiddle ’ , 22 tooltip : ’ leftMiddle ’ 23 } 24 } 25 } ) ;
V´ ypis k´odu B.4: Uk´azka skriptu qtips.js. Pouˇzit´ı jQuery qTip
62
ˇ ´ILOHA B. ZDROJOVE ´ KODY ´ PR
Pˇ r´ıloha C Uˇ zivatelsk´ a pˇ r´ıruˇ cka V t´eto pˇr´ıruˇcce naleznete instrukce pro vˇsechny d˚ uleˇzit´e funkce syst´emu.
C.1
Registrace
1. Vpravo nahoˇre kliknˇete na odkaz registrace. 2. Vyplˇ nte vˇsechny poloˇzky formul´aˇre. Vaˇse uˇzivatelsk´e jm´eno mus´ı b´ yt unik´atn´ı. Pokud jiˇz vaˇse jm´eno nˇekdo vyuˇz´ıv´a, syst´em v´as upozorn´ı. D´ale je nutn´e spr´avnˇe opsat kontroln´ı k´od z obr´azku. 3. Po u ´spˇeˇsn´e registraci v´am bude zasl´an e-mail na uvedenou adresu, kde je nutn´e kliknout na odkaz pro potvrzen´ı registrace. Pokud v´am e-mail nepˇrijde, zkontrolujte spam. 4. Po tomto potvrzen´ı je jiˇz moˇzn´e se pˇrihl´asit pod vaˇs´ım uˇzivatelsk´ ym jm´enem a heslem.
C.2
Pˇ rid´ an´ı str´ anky pro reklamu
1. Pro pˇrid´an´ı str´anky je nutn´a registrace a pˇrihl´aˇsen´ı do syst´emu. 2. V hlavn´ım menu zvolte poloˇzku MOJE WEBY, pod kterou se nach´az´ı v´ ypis vaˇsich str´anek pro reklamu. 3. Ve spodn´ı ˇca´sti str´anky vlevo kliknˇete na odkaz Pˇ RIDAT NOV´ Y WEB. 4. Vyplˇ nte a odeˇslete zobrazen´ y formul´aˇr. Dbejte na spr´avn´ y tvar URL adresy. V tomto formul´aˇri by URL adresa nemˇela konˇcit lom´ıtkem. 5. Po odesl´an´ı formul´aˇre se aplikace pokus´ı z´ıskat hodnoty PageRank, S-rank, Alexa rank a n´ahled str´anky. To m˚ uˇze trvat delˇs´ı dobu (aˇz 1 minutu). Pokud se str´anka pˇrid´a a vy u n´ı nevid´ıte n´ahled, zkuste tlaˇc´ıtko aktualizovat v sekci MOJE WEBY. 63
ˇ ´ILOHA C. UZIVATELSK ˇ ´ PR ˇ ´IRUCKA ˇ PR A
64
C.3
Vytvoˇ ren´ı nov´ e nab´ıdky
1. Pro vytvoˇren´ı nov´e nab´ıdky je nutn´a registrace a pˇrihl´aˇsen´ı do syst´emu. 2. V hlavn´ım menu zvolte poloˇzku VYTVOˇ RIT NAB´ IDKU. 3. Vyplˇ nte formul´aˇr, postupujte podle n´apovˇedy. Vˇsechny poloˇzky jsou povinn´e kromˇe UKONˇ CIT AUKCI a KUP HNED CENA. Pokud se v´am n´apovˇeda nezobrazuje, ujistˇete se, ˇze m´ate ve sv´em prohl´ıˇzeˇci zapnut´ y JavaScript. 4. Na konci formul´aˇre vyberte jeden z vaˇsich web˚ u pro tuto nab´ıdku, nebo m˚ uˇzete pˇridat nov´ y. Pokud pˇrid´av´ate nov´ y, m˚ uˇze vytvoˇren´ı nab´ıdky trvat delˇs´ı dobu (aˇz 1 minutu). 5. Po u ´spˇeˇsn´em odesl´an´ı formul´aˇre budete pˇresmˇerov´ani do sekce MOJE NAB´ IDKY.
C.4
´ cast na aukci/prodeji Uˇ
1. Pro u ´ˇcast na nab´ıdce je nutn´a registrace a pˇrihl´aˇsen´ı do syst´emu. ´NKA. Zde jsou zobrazeny 2. Kliknˇete v hlavn´ım menu na poloˇzku DOMOVSK´ A STRA prob´ıhaj´ıc´ı nab´ıdky. Je moˇzn´e je ˇradit podle libovoln´e kombinace sloupc˚ u. 3. Pro u ´ˇcast na nab´ıdce, je nutn´e zobrazit jej´ı detail. Uˇcin´ıte tak kliknut´ım na ikonku lupy u vybran´e nab´ıdky. 4. Pokud se jedn´a o prodej za pevnou cenu, m˚ uˇzete zakoupit libovoln´ y poˇcet slot˚ u za uvedenou ˇca´stku kliknut´ım na tlaˇc´ıtko KUP SLOT. Pokud jde o aukci, je moˇzn´e pˇrihodit libovolnou ˇca´stku nejn´ıˇze vˇsak minim´aln´ı pˇr´ıhoz. Jeho hodnota je vyplnˇena automaticky. Provedete tak tlaˇc´ıtkem Pˇ RIHOˇ D. Nˇekdy je moˇzn´e zakoupit aukci okamˇzitˇe tlaˇc´ıtkem KUP HNED. 5. Pokud nab´ıdku zakoup´ıte, nebo je v´aˇs pˇr´ıhoz na aukci nejvyˇsˇs´ı v dobˇe jej´ıho ukonˇcen´ı, budou v´am zasl´any kontaktn´ı u ´daje prodejce. Je tak´e moˇzn´e pˇridat k nab´ıdce koment´aˇr. Koment´aˇre slouˇz´ı prim´arnˇe k upˇresnˇen´ı nab´ıdky a zodpovˇezen´ı vˇsech nejasnost´ı.
Pˇ r´ıloha D Instalaˇ cn´ı pˇ r´ıruˇ cka Jelikoˇz se jedn´a o internetovou aplikaci napsanou v jazyce PHP, je nutn´e, aby bˇeˇzela na serveru Apache s nainstalovan´ ym a spr´avnˇe nakonfigurovan´ ym PHP a datab´az´ı. Pro vyzkouˇsen´ı je syst´em v obdob´ı od 20.5.2009 do 1.8.2009 um´ıstˇen na webov´em serveru na adrese www.webdeal.cz.
D.1
Instalace
1. Zkop´ırujte obsah sloˇzky aplikace do koˇrenov´eho adres´aˇre na vaˇsem serveru. 2. Ujistˇete se, ˇze sloˇzky /img/avatars, /img/screenshots, /img/screenshots/100x75 /app/temp a /app/log maj´ı nastaveno pr´avo z´apisu. 3. Do datab´aze importujte soubor webdeal.sql 4. V souboru /app/config.ini nastavte pˇrihlaˇsovac´ı u ´daje pro vaˇsi datab´azi. 5. Pokud je to tˇreba, tak v souboru index.php zmˇen ˇte cesty ke kl´ıˇcov´ ym adres´aˇr˚ um.
D.2
Poˇ zadavky na server
• PHP minim´alnˇe ve verzi 5.2.0. • Nainstalovan´a datab´aze MySQL 5. • Povoleny PHP rozˇs´ıˇren´ı php_curl, php_gd2 (mus´ı b´ yt v bundled verzi). • Povolena PHP funkce ini_set(). • Na serveru Apache povolen rewrite_module. • Vypnut´ y eAccelerator.
65
66
ˇ ´ILOHA D. INSTALACN ˇ ´I PR ˇ ´IRUCKA ˇ PR
Pˇ r´ıloha E Obsah pˇ riloˇ zen´ eho CD • /aplikace – Kompletn´ı zdrojov´e k´ody syst´emu. • /databaze – Obsahuje vyexportovanou datab´azi do souboru webdeal.sql. • /bakalarska_prace – PDF s bakal´aˇrskou prac´ı. • /prirucka – Obsahuje instalaˇcn´ı a uˇzivatelskou pˇr´ıruˇcku. • /dokumentace – Kompletn´ı dokumentace vygenerovan´a programem PHP Documentor.
67