MASARYKOVA UNIVERZITA Fakulta informatiky
BAKALÁŘSKÁ PRÁCE
Aplikace pro obchodování na internetu
Amir Džaferagič
BRNO 2008
PROHLÁŠENÍ „Prohlašuji, že jsem tuto bakalářskou práci vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování použil nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj.“
Amir Džaferagič .................................................
PODĚKOVÁNÍ Chtěl bych poděkovat své rodině a svým blízkým za toleranci a podporu v mém studiu a při tvorbě této bakalářské práce. Dále chci poděkovat svému vedoucímu práce Jaroslavu Ráčkovi za rady při jejím vypracování.
Vedoucí práce: RNDr. Jaroslav Ráček, Ph.D.
SHRNUTÍ Cílem mé práce bylo seznámit se s principy e-shopů, analyzovat používané technologie a scénáře nakupování. Rovněž bylo mým úkolem navrhnout a implementovat internetový obchod menší velikosti.
KLÍČOVÁ SLOVA Internetový obchod, analýza systému, implementace, webová aplikace, DFD, ERD
OBSAH 1. ÚVOD ................................................................................................................................................................. 7 2. SOUČASNÉ TRENDY......................................................................................................................................... 8 2.1 SCÉNÁŘ NÁKUPU ............................................................................................................................................ 8 2.2 ZPŮSOB PLATBY............................................................................................................................................. 9 2.3 UKÁZKA SOUČASNÝCH INTERNETOVÝCH OBCHODŮ ........................................................................................ 11 2.3.1 MEGAPIXEL ........................................................................................................................................ 11 2.3.2 ALZA.CZ ............................................................................................................................................. 12 2.3.3 SHELL ................................................................................................................................................. 13 2.3.4 STUDENT AGENCY ............................................................................................................................. 13 3. ANALÝZA A NÁVRH SYSTÉMU ..................................................................................................................... 15 3.1 POPIS SYSTÉMU ........................................................................................................................................... 15 3.2 KONTEXTOVÝ DIAGRAM ............................................................................................................................... 15 3.2.1 Administrátor..................................................................................................................................... 16 3.2.2 Zákazník ............................................................................................................................................. 17 3.3 DIAGRAM DATOVÝCH TOKŮ .......................................................................................................................... 17 3.4 ENTITNĚ RELAČNÍ DIAGRAM ........................................................................................................................ 18 3.4.1 Zákazníci ............................................................................................................................................ 19 3.4.2 Produkty ............................................................................................................................................. 19 3.4.3 Objednávky......................................................................................................................................... 20 4.UŽIVATELSKÉ ROZHRANÍ ............................................................................................................................. 21 4.1 ZÁKAZNÍK.................................................................................................................................................... 21 4.1.1 Zobrazení produktů ........................................................................................................................... 21 4.1.2 Detailnější popis produktu................................................................................................................. 22 4.1.3 Košík ................................................................................................................................................... 22 4.1.4 Objednávka......................................................................................................................................... 23 4.2 ADMINISTRÁTOR ......................................................................................................................................... 23 4.2.1 Kategorie produktů............................................................................................................................ 23 4.2.2 Produkty ............................................................................................................................................. 24 4.2.3 Uživatelé............................................................................................................................................. 24 4.2.4 Způsob dopravy.................................................................................................................................. 24 4.2.5 Způsob platby ..................................................................................................................................... 24 4.2.6 Stav objednávky ................................................................................................................................. 25 4.2.7 Objednávky......................................................................................................................................... 25 5. IMPLEMENTACE............................................................................................................................................. 26 5.1 TECHNOLOGIE.............................................................................................................................................. 26 5.1.2 Programovací jazyk ........................................................................................................................... 26 5.1.3 Databáze ............................................................................................................................................ 26 5.1.4 Ostatní použité nástroje .................................................................................................................... 27 5.1.5 SEO ..................................................................................................................................................... 28 5.2 INICIALIZACE ............................................................................................................................................... 29 5.3 TŘÍDA SHOP ................................................................................................................................................ 29 5.3.1 Vykreslení stránky.............................................................................................................................. 29 5.3.2 Přihlašování uživatele........................................................................................................................ 30 5.3.3 Bloky................................................................................................................................................... 30 5.4 PŘÍSTUP K DATABÁZI ................................................................................................................................... 31 5.5 TŘÍDA REQUEST .......................................................................................................................................... 31 5.6 TŘÍDA BASKET ............................................................................................................................................ 31 5.7 TŘÍDA UTIL ................................................................................................................................................. 32 5.8 MODULY ...................................................................................................................................................... 33 5.8.1 Výpis kategorie produktů .................................................................................................................. 33 5.8.2 Detail produktu.................................................................................................................................. 33 5.8.3 Přihlášení uživatele............................................................................................................................ 34 5.8.4 Registrace uživatele ........................................................................................................................... 34
5
5.8.5 Nákupní košík..................................................................................................................................... 34 5.8.6 Pokladna ............................................................................................................................................ 34 5.8.7 Objednávky......................................................................................................................................... 35 5.8.8 Chybová stránka ................................................................................................................................ 35 5.8.9 Administrace ...................................................................................................................................... 35 6. ZÁVĚR .............................................................................................................................................................. 36 7. POUŽITÉ PRAMENY A LITERATURA .......................................................................................................... 37 8. PŘÍLOHA ......................................................................................................................................................... 38 8.1 OBSAH PŘILOŽENÉHO CD............................................................................................................................. 38 8.2 UKÁZKY KÓDU ............................................................................................................................................. 39
6
1. Úvod Dnes již termín Internet v naší společnosti není velkou neznámou, jak tomu bylo dříve. Podle světových statistik internet používá více jak 21% populace (viz [1]), což je velký počet potenciálních zákazníků. Tuto výhodu už řadu let využívají některé firmy, které přesouvají své obchodování na internet za účelem snižovaní svých nákladů, zrychlení transakčního procesu, rychlejší odezvy vůči zákazníkovi a zefektivněni svých služeb. Firmy čím dál tím více investují do nových informačních technologií a zejména do elektronického obchodu (e-shopu), který je nejpoužívanějším nástrojem z oblasti ecommerce, za účelem lepší konkurenceschopnosti na tak velikém trhu, jakým je internet. E-shop se dělí na dva hlavní segmenty se zaměřením na B2C (Business to Customer) prodej koncovým spotřebitelům a B2B (Business to Business) - prodej obchodním partnerům. Elektronické obchody představují obrovské výhody oproti nakupování fyzickému. Jedním z podstatných rozdílů je to, že kupující nemusí opustit počítačové pracoviště, nýbrž stačí několika kliky zboží objednat. Rozdíl je také samozřejmě v uhrazení poplatku, kdy kupující může poplatek uhradit bezhotovostně a opět z tepla domova. Dalším odlišným faktorem je například to, že zboží na internetu je ve většině případech o několik procent levnější než v obchodě kamenném. Internetové obchodování se jeví jako velmi výhodná činnost pro zákazníka i prodávajícího a lze tedy říci, že elektronické obchody mají do budoucna velké vyhlídky. V následující kapitole se zabývám popisem současných trendů při zřizování a používání internetových obchodů. Tato kapitola dále obsahuje rozbor používaných scénářů nákupu, způsobů plateb a ukázky mnou vybraných internetových obchodů. V další kapitole provádím analýzu a návrh e-shopu. Předposlední kapitola popisuje uživatelské rozhraní internetového obchodu a na závěr se zabývám jeho následnou implementací.
7
2. Současné trendy Společnosti, které se rozhodnou své produkty či služby poskytovat na internetu prostřednictvím e-shopu, by měly prvně promyslet, v jakém rozsahu budou podnikat, jaké způsoby používat při dodání zásilek, jakým způsobem budou zákazníci objednávky hradit a jiné vlastnosti. Na základě vize, kterou si každá firma předem vytvoří, si může vybrat, jakým způsobem realizují svoje představy v praxi. Pokud se chceme odlišit od ostatních společností a být originální ve svém odvětví, tak zvolíme způsob vytvoření na klíč, kdy oslovíme profesionální firmu, zabývající se návrhem a implementací webových aplikací. Ti nám na základě našich požadavků a představ vytvoří přesný e-shop šitý na míru. Tato záležitost není jednoduchá a tudíž ani levná. Proto pokud bychom se chtěli poohlédnout po lacinějších metodách, máme možnost si vlastní e-shop vytvořit pomocí takzvaných free e-shopu. Takovým produktem je například VirtueMart, což je rozšíření pro redakční systém Joomla!. Umožní nám spravovat neomezený počet položek, kategorií a podkategorií. Je to volně šiřitelný software; tedy neplatíme žádné licenční poplatky a náklady spojené s provozem jsou minimální. Na druhou stranu však strávíme více času tím, že budeme zkoumat jak VirtueMart funguje. Proto další variantou je pronajmutí hotového produktu, který by měl posloužit firmám ke zjištění, zda se jejich podnikání uchytí i na internetu. Následovně z dlouhodobého hlediska přistoupit k variantě první. Pro lepší propagaci své činnosti můžeme využít službu AdWords společnosti Google, která nabízí možnost vystavování reklam firem na webové stránky jiných autorů. Je to velmi výhodné, protože platíme pouze za to, když uživatel klikne na naší reklamu. Organizace, které používají ERP (Enterprise Resource Planning) systémy (tímto termínem jsou označovány komplexnější informační systémy), mají možnost propojit své účetnictví s elektronickými obchody za účelem zbavování se manuálního udržování shodných údajů v e-shopu a účetnictví.
2.1 Scénář nákupu Proces nakupování (ve smyslu vybrat si-zaplatit-dostat) v e-shopech se podstatně o moc neliší od klasického nakupování v kamenných obchodech. K jiným příjemným vlastnostem při nakupování přes internet patří také to, že se o daném výrobku můžeme dozvědět více informací a zaměřit se pouze na ty, které nás doopravdy zajímají. Při rozhodování o koupi nejsme do ničeho tlačeni ze strany obchodníků. Kladnou doménou je také možnost si srovnat cenovou dostupnost u jiných společností současně a přečíst si názory jiných zákazníků, kteří své zkušenosti o vybraném zboží vkládají do diskusních fór na daném elektronickém obchodě.
8
Obrázek 2.1: Typický internetový obchod[2]
Většina e-shopů má téměř stejnou strukturu webu skládající se z hlavní stránky, katalogu produktů, průvodce při objednávání, nákupního koše a pokladny. Úvodní stránka nám sděluje, jaký druh produktů/služeb si zde můžeme obstarat. Dále nám eshop může nabídnout možnost registrace. Tím si ušetříme čas při vyplňování svých údajů při budoucích nákupech, dále budeme pravidelně informováni prostřednictvím emailu o novém zboží a slevách. V katalogu produktů jsou detailněji popsány výrobky včetně jejich obrázků. Pomocí průvodce si můžeme blíže specifikovat výrobek podle svého přání např. výběr barvy nebo velikosti. Dále máme možnost vidět to, co už jsme vložili do nákupního košíku a kolik bude nákup celkem stát. V nákupním košíku pak můžeme upravovat počty kusů objednaného zboží. Konečným místem je pokladna. Pokud nejsme registrováni, musíme nejprve vyplnit své údaje, dále pak upřesňujeme způsob dodání a platby za zboží.
2.2 Způsob platby Při placení máme na výběr z následujících možností: • • • •
Platební kartou Elektronickými penězi Bankovním převodem Na dobírku
Nejpoužívanější metodou placení jsou především platební karty, které jsou vydávané společnostmi jako je VISA, MASTER CARD, AMERICAN EXPRESS a další karty prostřednictvím bank. Platební proces, kde je zapotřebí uvést údaje o platební kartě (číslo karty, datum ukončení, třímístní číselný kód (CVC2/CVV2), který se nachází na zadní straně platební karty) je uskutečňován bankou, se kterou má obchodník podepsanou smlouvu. Banka po zpracování platby informuje o výsledku transakce zákazníka a obchodníka současně pomocí e-mailu. Obchodník pak dané zboží/službu dodá zákazníkovi. Tímto způsobem je odstraněna možnost zneužití údajů ze strany obchodníka. Ke zneužití třetí osobou obecně, používají bankovní aplikace šifrovací protokol HTTPS. Přiklad platebního formuláře je zobrazen na obrázku 2.2.
9
Obrázek 2.2: Ukázka platebního formuláře České spořitelny a.s
Placení elektronickými penězi se stává čím dál tím více populárním, zejména pro obchodníky elektronických obchodů. Mezi hlavní výhody patří: obdržení dané částky okamžitě do elektronické peněženky po provedení platby zákazníkem, menší náklady než při použití platebních karet, možnost integrace platebního systému do e-shopu nebo platebního tlačítka a získávání nových klientů, kteří vyloženě hledají takovou možnost placení. Pro zákazníky to přináší následující výhody: větší bezpečnost než u platebních karet jelikož nikde neuvádíme své údaje o kartě a větší kontrolu nad svými penězi. Uživatel, který se rozhodne používat službu elektronická peněženka si založí konto například u společnosti Československá obchodní banka a.s., která nabízí tuto službu pod názvem PaySec. Následovně převede peníze ze svého běžného bankovního účtu pomocí internetového bankovnictví nebo platební kartou do nově založeného konta. Poté může začít nakupovat u obchodníků podporující tuto službu. K zaplacení stačí potvrdit příslušnou částku, přihlašovací údaje a autorizační sms kód. Většina bank dnes již nabízí internetové bankovnictví k bankovním účtům jako standardní službu. Bankovní převod je uskutečňován prostřednictvím rozhraní internetového bankovnictví, kde musíme zadat číslo účtu obchodníka, kód jeho banky, specifický symbol (většinou naše identifikační číslo, které jsme získaly při registraci v elektronickém obchodě), variabilní symbol (je generovaný kód, který identifikuje danou transakci) a danou částku za zboží/službu. Pro potvrzení platby většinou musíme ještě zadat autorizační sms kód. Při odeslání platby se poukázaná částka objeví na účtu obchodníka do třech pracovních dnů. Poslední způsob jak uhradit částku za nákup je na dobírku. Při tomto způsobu nákupu platíme za zboží až když je nám doručeno do rukou. Tuto službu poskytuje například Česká pošta, která danou zásilku doručí k adresátovi; není-li adresát zastižen, je mu do schránky vložena výzva k vyzvednutí zásilky na příslušné pobočce České pošty. 10
2.3 Ukázka současných internetových obchodů V této kapitole popisuji vybrané internetové obchody z řad současných, které jsou robustnější a propracovanější, než mnou navržený e-shop.
2.3.1 MEGAPIXEL
Obrázek 2.3: Ukázka úvodní web. stránky společnosti MEGAPIXEL s.r.o.
MEGAPIXEL je společnost zabývající se prodejem digitálních fotoaparátů a jejich příslušenství. Její internetový obchod už podruhé v řadě vyhrál cenu v renomované soutěži WebTop 100 za nejlepší e-shop roku. Tento e-shop těží především ze své přehlednosti; uživatel se tak snadněji orientuje. Produkty si můžeme prohlížet buď vybráním kategorie o kterou máme zájem, nebo prostřednictvím fulltextového vyhledávaní s možností omezení dle parametrů. O každém produktu v příslušné kategorii je uveden stručný popis a informace týkající se například toho, zda je zboží doprodávané nebo zda se k němu vztahuje doprava zdarma. Detailnější specifikace produktu je zobrazena po vybrání daného produktu z kategorie. Zde má zákazník možnost si prohlédnout příslušenství, názory ostatních zákazníků a společnosti MEGAPIXEL k tomuto výrobku, dále má zákazník možnost prohlížet ukázkové fotografie v plném rozlišení, které jsou vyfocené tímto fotoaparátem. Daný výrobek také můžeme porovnávat s ostatními produkty nebo vyslat hlídacího psa. Pomocí této služby budeme prostřednictvím emailu informování o změnách cen týkajících se tohoto produktu. Po rozhodnutí o koupi si výrobek přidáme do košíku, kde máme možnost si dokoupit další příslušenství. Dalším krokem je výběr způsobu dopravy a platby. Předposledním krokem je vyplnění osobních údajů. Zákazníci, kteří v minulosti již nakupovali v tomto internetovém obchodu, se jen přihlásí do systému. Poslední častí je potvrzení a shrnutí objednávky, kde máme také možnost vyjádřit svůj názor „jak se nám nakupovalo“. Pokud jsme zde nakupovali poprvé, jsou nám ještě zobrazeny přihlašovací údaje k dalším objednávkám v budoucnu. Potvrzení je také zasláno na mail uvedený v objednávce.
11
2.3.2 ALZA.CZ
Obrázek 2.4: Ukázka úvodní web. stránky společnosti Alza.cz a.s
Společnost ALZA.CZ dříve známá pod obchodním názvem ALZASOFT je jedním z největších internetových obchodů v oblasti informačních technologií a elektroniky vůbec. Při načtení úvodní stránky jsme informováni o novinkách, radách a slevách. V pravé časti se nachází textové pole, které slouží k přihlašování uživatelů. Nejsme-li zaregistrování, máme možnost se prostřednictvím spodního odkazu zaregistrovat. K nalezení hledaného zboží máme hned několik způsobů. V levém panelu se nachází zboží roztříděné podle druhu nebo výrobní značky. Prostřednictvím odkazu katalog zboží se nám zobrazí nabídka z levého panelu v grafickém provedení. Jinou možností výběru je využít vyhledávač, kde stačí zadat výrobní značku nebo druh zboží, o kterém máme zájem. Pokud máme zájem například o notebook, stačí vybrat z katalogu zboží kategorii notebook, kde se následně zobrazí podkategorie s obsahem všech notebooků, které společnost ALZA.CZ nabízí. Podkategorii lze upřesnit dle parametrů využití nebo pomocí průvodce notebooky. Po nalezení konkrétního výrobku, si můžeme přečíst jeho technické parametry, specifikace a recenzi. Na téže stránce je nám také nabízena možnost zakoupení příslušenství k danému produktu. Vybrané zboží si pomocí tlačítka koupit vložíme do virtuálního košíku, kde je zapotřebí specifikovat způsob dopravy, platby a dodací údaje. Jako způsob dopravy si můžeme vybrat osobní odběr nebo doručení daného zboží tentýž den v rámci bydliště (v Praze Messenger), doručovaní po celé ČR do 24/48 hodin (PPL/Česká pošta). Zaplatit můžeme hotově, dobírkou, platební kartou, bankovním převodem i na splátky. Dodací údaje uvádíme jen v případě, že nejsme registrováni. Po odeslání košíku se naše objednávka začne zpracovávat. O výsledku zpracování jsme informováni e-mailem.
12
2.3.3 SHELL
Obrázek 2.5: Ukázka katalogu produktů společnosti Shell Czech Republic a.s.
SHELL CZECH REPUBLIC je petrolejářská společnost, která své pravidelné zákazníky odměňuje věrnostním programem SMART. Zákazník, který pravidelně čerpá pohonné hmoty u této společnosti, má možnost si požádat v čerpacích stanicích nebo na internetu o členství v klubu SMART a sbírat odměňující body za každé čerpání nebo nákup provedený na čerpací stanici SHELL. Za nasbírání určitého počtu bodů si zákazník může po zaregistrování do uživatelského systému SMART Online objednávat nabízené zboží v elektronickém obchodě společnosti SHELL. K objednávání výrobků se musíme prvně přihlásit. Po přihlášení se dozvíme, kolik bodů již máme nasbíráno a stav o provedených objednávkách. Následovně si můžeme vybírat dárky podle různých kritérií např. podle počtu bodů nebo kategorií. Objednávat na e-shopu můžeme pouze produkty, u kterých máme nasbíráno dostačující počet bodů, a které jsou doručovány zásilkou. Ostatní uváděné zboží je přímo k dostání na čerpacích stanicích. O každém produktu si můžeme přečíst detailní popis. Pro objednání produktu stačí zmáčknout tlačítko přidej do košíku, a potvrdit objednávku. Výsledek transakce je nám poslán na náš e-mail. Objednané zboží je doručené na adresu zákazníka do 30 dnů od objednání.
2.3.4 STUDENT AGENCY
Obrázek 2.6: Ukázka úvodní web. stránky společnosti STUDENT AGENCY s.r.o. 13
Společnost STUDENT AGENCY nabízí svým zákazníkům, kteří cestují pravidelnými linkami v rámci České republiky, možnost rezervovat si jízdenku prostřednictvím internetu. Před použitím této služby si můžeme obstarat kreditovou jízdenku pro danou trasu (například Brno - Praha), kterou získáme na základě registrace na webových stránkách společnosti STUDENT AGENCY. Poté co jsme provedli registraci, obdržíme emailem pokyny k vyzvednutí kreditové jízdenky na příslušné prodejně. Kartu můžeme dobít na elektronickém obchodě platební kartou (VISA, VISA Elektron, MasterCard, Maestro), elektronickými penězi (PaySec) nebo přímo na prodejně STUDENT AGENCY hotovostí. K rezervacím jízdenek pro trasu Brno – Praha se dostaneme pomocí odkazu Jízdní řád / Rezervace (Homepage > Student Agency Express > Praha - Brno a zpět > Jízdní řád / Rezervace), kde si vybereme datum a trasu (odkud/kam). Následovně obdržíme výsledek vyhledávání, kde si vybereme spoj na základě kritérií – času odjezdu, promítaného filmu. Jeli námi vyhovující spoj ještě volný zjistíme tak, že je u něj zobrazen odkaz rezervace. Po zmačknutí tohoto odkazu jsme přesměrováni na stránku k přihlášení do rezervačního systému. Pokud nevlastníme kreditovou jízdenku, máme možnost zaplatit přímo platební kartou nebo elektronickými penězi. Posledním krokem je výběr volného sedadla v autobuse a tím je rezervace hotová.
14
3. Analýza a návrh systému 3.1 Popis systému Implementace nového internetového obchodu má za úkol poskytnout zákazníkovi eshopu veškeré služby, které nabízí standardní internetové obchody. Měl by tedy evidovat informace o objednávkách, umožňovat obchodníkovi (administrátorovi) efektivnější správu informací o výrobcích, měl by dostávat informace o nových objednávkách e-mailem. Uživatel by měl mít možnost přehledného způsobu nakupování a výběru doručení a platby za zboží. Internetový obchod by také měl kontrolovat formát vstupních dat při registraci uživatelů nebo objednávání zboží. Při vyskytnutí chyby by se webová aplikace měla chovat korektně tím, že uživatel bude informován o dané chybě definovanou hláškou. Významnou roli také hraje bezpečnost, kde by se měla hesla uživatelů šifrovat v databázi. Posledním požadavkem je konzistentnost databáze, kde by se při odstranění kategorie měly automaticky odstranit i všechny její produkty.
3.2 Kontextový diagram Kontextový diagram je zvláštním případem diagramu datových toků (DFD). Na diagramu je znázorněn pouze jediný proces, kterým je reprezentován celý systém. Hlavním účelem kontextového diagramu je zdůraznit hranice mezi systémem a vnějším světem. Zobrazuje toky procházející přes rozhraní systému, tedy data proudící z okolí nebo do okolí systému, která jsou na diagramu reprezentována terminátory nebo sdílenými paměťmi.[3] Kontextový diagram pro webovou aplikaci je znázorněn na obrázku 3.1. Obsahuje jeden proces pojmenovaný e-shop reprezentující konkrétní aplikaci a dva terminátory reprezentující vnější entity pojmenované zákazník a prodejce (administrátor).
15
Obrázek 3.1: Kontextový diagram webové aplikace e-shop
3.2.1 Administrátor Uživatel administrátor pracuje v administrační části elektronického obchodu, kde vytváří a upravuje strukturu nabídky produktů. K administrační práci máme k dispozici následující funkce: • • • • • • •
výpis kategorií, vytváření a editaci kategorií výpis produktů, přidávaní nových produktů (například informační text, obrázek nebo cena), editaci a vyřazení z prodeje. výpis objednávek, zobrazení kompletního výpisu o objednávce, editovat stav objednávek výpis údajů o registrovaných uživatelích, deaktivace a mazání uživatelů výpis způsobu dopravy, editace, deaktivace a přidání nového způsobu dopravy výpis způsobu platby, editace, deaktivace a přidaní nového způsobu platby výpis stavu objednávek, editace a přidaní nového stavu
16
3.2.2 Zákazník Uživatel zákazník nemá oprávnění k přístupu do administračního rozhraní. Muže prohledávat kategorie, získávat informace o nabízených produktech, uskutečňovat objednávky. Uživatel má k dispozici následující funkce: • • • • •
registrovaní/přihlašování se do systému prohlížení seznamu nabízených produktů výpis detailního popisu produktů včetně obrázků vložení či případné odebrání z nákupního košíku zadání objednávek, jejích potvrzení a obdržení potvrzujícího mailu
3.3 Diagram datových toků Diagram datových toků je modelovací nástroj umožňující zobrazit systém jako síť procesů, které plní určité funkce a předávají si mezi sebou data. DFD tak podává funkčně (procesně) orientovaný pohled na systém. Diagramy obsahují čtyři základní typy komponent, jimiž jsou terminátory, procesy, datové toky a paměti.[3] Pro webovou aplikaci je diagram datových toků znázorněn na obrázku 3.2.
Obrázek 3.2: Diagram datových toků internetového obchodu 17
Na diagramu datových toků se nacházejí čtyři procesy, které vycházejí z procesu e-shop umístěném na kontextovém diagramu. Proces 1.1 Objednávky slouží k vytváření objednávek zákazníkem za použití košíku, kde se uchovávají informace o přidaném/odebraném zboží. Zákazník si pak vybírá způsob platby a doručení zásilky. Pro dokončení objednávky uživatel musí vyplnit své údaje (pokud není zaregistrovaný v systému) a potvrdit objednávku. Potvrzení objednávky je uživateli i administrátorovi posláno na e-mail. Proces 1.2 Administrace obsahuje administrační procesy, které se starají o evidenci kategorií/produktů (přidávání, editovaní a odstranění kategorie/produktu) a o ostatní administrační nastavení, které je patrné z obrázku 3.2. Při odstranění kategorie se automaticky odstraní i produkty nacházející se v dané kategorii. Každý produkt se nachází ve své kategorii, kde je detailně popsán. Proces 1.3 Informace o produktech zodpovídá za správné vykreslení všech produktů včetně jejích detailních popisů, a tím umožnil zákazníkovi vytvořit objednávku. Proces 1.4 Správa zákazníků se stará o evidenci zákazníků, kteří se registrovali do systému a následně pak ověřuje jejich autentizaci. Diagram datových toků dále obsahuje pět esenciálních pamětí. Paměť zboží ukládá položky zboží, které jsou nabízeny zákazníkovi e-shopu. Další paměť zákazníci ukládá všechny zákazníky, kteří jsou v systému registrovaní. Paměť volitelná nastavení umožňuje zákazníkovi vybrat způsob platby a doručení zásilky. Předposlední pamětí jsou objednávky. Tato paměť ukládá veškeré objednávky. Poslední pamětí jsou stavy, které vyjadřují v jakém stavu se objednávka právě nachází.
3.4 Entitně relační diagram Entitně relační diagram (ERD) znázorňuje datový model systému, který ukazuje neměnné atributy a strukturu dat, a vyjadřuje vztahy, které nejsou zachyceny v procesních modelech. Komponentami datového modelu jsou: entitní a vztahové množiny. Entitní množina je v ERD reprezentována obdélníkem, ve kterém je uvedeno její jméno. Představuje skupinu nebo množinu objektů (entit) v reálném světě. Vztahové množiny obsahují vztahy mezi entitami, které bývají zkráceně nazývány relacemi.[3] Webová aplikace elektronického obchodu uchovává svá data a informace v databázi o devíti objektech (entitách). Entitě relační diagram je znázorněn na obrázku 3.3.1
1 v ERD jsem použil pro přehlednost české pojmenování atributů a entit
18
Obrázek 3.3: Entitně relační diagram internetového obchodu
3.4.1 Zákazníci Zákazníci jsou uloženi v tabulce Zákazník a odpovídá jim esenciální paměť zákazníci v diagramu datových toků. U každého zákazníka musí být povinně uloženo přihlašovací jméno a heslo, jméno a příjmení, e-mail, položky adresy a příznaky, zda je uživatelský účet aktivní a zda se jedná o administrátora. Nepovinné atributy jsou: název společnosti, IČ, DIČ a telefonní číslo.
3.4.2 Produkty Produkty jsou uloženy v tabulce Produkt. Povinnými atributy jsou název produktu, unikátní identifikátor, který slouží pro vytváření přepisovaných URL (Uniform Resource Locator), cena produktu a hodnota DPH, příznak zda je produkt aktivní a množství položek které jsou na skladě. Dále produkt obsahuje nepovinný popis a URL ilustračního obrázku. Produkty jsou propojeny vazbou 1:N ke kategorii produktů. Kategorie produktů jsou uloženy v tabulce Kategorie. Ty podobně jako produkty obsahují povinné atributy název a unikátní identifikátor, příznak zda je kategorie aktivní a dále pořadí kategorie ve výpisu. Nepovinným atributem je pak popis kategorie. Entitám Produkt a Kategorie odpovídá esenciální paměť zboží v diagramu datových toků.
19
3.4.3 Objednávky Objednávky se ukládají do tabulky Objednávka. Této entitě odpovídá esenciální paměť objednávky v diagramu datových toků. Povinnými atributy jsou jméno, příjmení, e-mail a adresa bydliště objednávajícího. Nepovinným atributem je podobně jako u zákazníků telefonní číslo, název společnosti, IČ a DIČ. Každá objednávka má pak dále povinnou referenci na stav objednávky, typ platby a typ doručení, a nepovinnou referenci na zákazníka, pokud objednávku vytváří registrovaný uživatel. Dále je vazbou typu M:N tabulka Produkty_na_objednávce propojena s tabulkou produkty. Ke každému referovanému produktu je uložena jeho aktuální cena a DPH a objednané množství. Stavy objednávky se ukládají do tabulky Stav a odpovídá jim esenciální paměť stavy. Povinnými atributy jsou název stavu a příznaky, zda je objednávka nově vytvořená nebo zda je objednávka vyřízená. Typy platby se ukládají do tabulky Typ_platby. Povinnými atributy jsou název, cena, DPH, příznak, zda je tento typ platby aktivní a příznak zda potřebuje bankovní spojení (například pro platbu převodem). Nepovinným atributem je popis typu platby. Typy doručení se ukládají do tabulky Typ_dopravy. Povinnými atributy jsou název, cena, DPH, příznak, zda je tento typ doručení aktivní, příznak, zda je pro tento typ doručení vyžadována adresa pro doručení. Dále je povinná vazba na tabulku se stavy objednávky, která určuje, ve kterém stavu je objednávka připravena k vyzvednutí nebo expedována. Nepovinným atributem je popis typu doručení. Tabulky Typ_platby a Typ_dopravy jsou propojeny vazbou M:N (tabulka Způsob_plateb_za_dopravu). Těmto entitám odpovídá v diagramu datových toků esenciální paměť volitelná nastavení.
20
4. Uživatelské rozhraní V této kapitole je popsáno ovládání internetového obchodu, jehož popis je rovněž doprovázen obrázky.
4.1 Zákazník Po vstupu zákazníka do internetového obchodu mu jsou nabízeny rozmanité služby a popisy produktů. Vzhled a popis se mohou v různých e-shopech lišit na základě uvážení provozovatele.
4.1.1 Zobrazení produktů Na obrázku 4.1 je znázorněno, jak může vypadat výpis produktu z určité kategorie produktů. U každého produktu je vypsáno jméno produktu a cena včetně DPH. Zákazník si může nechat vypsat detailnější popis výrobku, kde lze následně produkt rovnou objednat.
Obrázek 4.1: Seznam produktů v dané kategorii
21
4.1.2 Detailnější popis produktu Přes výpisu produktů se zákazník dostává na detailnější výpis daného produktu, kde je navíc uvedena cena bez DPH a informace o tom, zda je zboží skladem či nikoliv.
Obrázek 4.2: Detailnější výpis produktu
4.1.3 Košík Nákupní košík obsahuje přehledné informace o produktech, které si zákazník vložil do košíku včetně jejích cen a rovněž i celkové ceny za zboží (s DPH i bez DPH). Zákazník má možnost dané zboží odstranit z košíku, změnit počet kusů, pokračovat v nákupu nebo dokončit objednávku.
Obrázek 4.3: Nákupní košík
22
4.1.4 Objednávka Ze sekce nákupního košíku zákazník přistupuje k vytvoření objednávky, kde je pro lepší přehlednost zobrazen obsah nákupního košíku. V této časti si uživatel zvolí způsob, jakým mu bude objednávané zboží doručeno. Po zvolení vyhovujícího způsobu doručení, může zákazník přistoupit k další časti – výběru způsobu platby. Předposledním krokem je uvedení svých osobních údajů, které musí zákazník zadat pokud není dosud registrován. Následně pak může potvrdit objednávku, která mu bude zrekapitulována. Pokud je vše v pořádku, lze definitivně objednávku potvrdit nebo se vrátit zpět k zadání údajů.
4.2 Administrátor Pro zpřístupnění administračního rozhraní je nutné přihlášení pod administračním jménem a heslem. V této sekci jsou popsány možnosti administrátora, které e-shop nabízí.
4.2.1 Kategorie produktů Je možné vytvářet nové kategorie produktů a editovat nebo mazat stávající. Kategorie je také možno aktivovat nebo deaktivovat (např. při dočasné nedostupnosti produktů – nezobrazí se zákazníkovi, ale v systému jsou stále uloženy). Dále je možné kategorie řadit podle vlastního uvážení (např. aby zajímavější kategorie byly zobrazeny výše a potenciální zákazník si jich lépe všiml) nebo je jednorázově seřadit podle abecedy. Při vytvoření se kategorii přiřadí jednoznačný identifikátor, který se používá v URL pro stránku s výpisem kategorie.
Obrázek 4.4: Vytváření a editace kategorií 23
4.2.2 Produkty Je možné vytvářet nové produkty a editovat či mazat produkty stávající. Podobně jako kategorie je zde možnost aktivovat či deaktivovat produkty. Při vytváření nebo editaci produktu je možné z menu vybrat do jaké kategorie produkt náleží a pomocí správce souborů vybrat ilustrační obrázek a nastavit jej. Při vytvoření se produktu, podobně jako kategorií, přiřadí jednoznačný identifikátor, který se používá v URL pro stránku s detailem produktu a také v nákupním košíku.
4.2.3 Uživatelé Je zde zobrazen výpis zaregistrovaných zákazníků v systému a je možné zobrazit si jejich detail. Lze je také aktivovat či deaktivovat nebo je ze systému vymazat. Po deaktivaci uživatele není tento zákazník schopen se do systému přihlásit. V tomto výpisu nejsou zahrnuti administrátoři.
Obrázek 4.5: Seznam zaregistrovaných zákazníků
4.2.4 Způsob dopravy Je možné vytvářet nové způsoby dopravy nebo měnit stávající. Je možné je aktivovat či deaktivovat. U každého způsobu dopravy je možné nastavit, zda vyžaduje po zákazníkovi zadání adresy pro doručení. Dále se zde vybírá stav objednávky, ve kterém je tato objednávka expedována a text který se zákazníkovi při přechodu do tohoto stavu odešle e-mailem. Také se zde vybírají způsoby platby které je možné využít s daným způsobem dopravy.
4.2.5 Způsob platby Je možné vytvářet nové způsoby platby a měnit stávající. Je možné je aktivovat či deaktivovat. U každého způsobu dopravy je možné nastavit, zda se mají zákazníkovi zobrazovat informace o bankovním spojení či nikoliv. 24
4.2.6 Stav objednávky Je možné vytvářet nebo editovat stavy, ve kterých se mohou nacházet jednotlivé objednávky. Tento stav je zobrazen uživateli ve výpisu jeho objednávek. Pokud má stav nastaven příznak nová, pak se jedná o výchozí stav, ve kterém se bude nacházet nově zadaná objednávka. Pokud je u stavu nastaven příznak například vyřízená, pak se jedná o konečný stav objednávky a zákazníkovi je při přepnutí do tohoto stavu jeho objednávky zaslán e-mail s upozorněním.
4.2.7 Objednávky Je možné prohlížet, mazat zadané objednávky, nebo měnit jejich stav, který se zobrazuje zákazníkovi.
Obrázek 4.6: Seznam objednávek
25
5. Implementace 5.1 Technologie V současné době je již většina elektronických obchodů dynamického rázu. Tím se rozumí, že uživatelé ovlivňují obsah stránek tím, že přidávají své komentáře v diskusních fórech, registrují se, odpovídají na ankety a vkládají zboží do košíku. Nejběžnější technologie používané pro takové webové aplikace, které se implementují dle vhodně zvoleného programovacího jazyka, databáze a jiných nástrojů jsou stručně popsány níže.
5.1.2 Programovací jazyk Pro provozování dynamických aplikací na serveru je potřeba, aby náš server na kterém budou umístěné naše webové stránky, podporoval skriptovací jazyky. Tato skupina programovacích jazyků těží z toho, že naprogramovaný skript se nekompiluje (nepřekládá) do strojového kódu, nýbrž je interpretován za běhu procesu na straně serveru. Další výhodou je, že programátor snadněji vyvíjí a spravuje kód. Mezi nevýhody patří především rychlost. Tím, že se aplikace nepřekládají do spustitelného kódu, jsou pomalejší oproti kompilovaným. Při výběru správného skriptovacího jazyka si musíme dávat pozor, jestli je takový jazyk podporován na hostingových serverech a za jakých podmínek je provozován. Důležité je myslet na to, zda-li podporuje všechny funkce daného jazyka, abychom pak v budoucnu nemuseli své webové stránky přesouvat na jiný hosting. Mezi takové jazyky patří například PHP (Personal Home Page). Tento skriptovací jazyk je určený především pro programování webových aplikací. Oficiální interpret je dostupný pod otevřenou licencí. Syntaxe jazyka je podobná jazyku C/C++. PHP verze 5 podporuje objektový model, který je v této aplikaci plně využit. PHP skripty fungují bez větších úprav a na mnoha různých operačních systémech. Podporuje mnoho knihoven pro různé účely například ke zpracování textu, grafiky, práci se soubory, šifrování nebo přístup k databázovým systémům. Při implementaci byla konkrétně použita verze 5.2.2.[4] Dále také stojí za zmínku programovací jazyk ASP.NET (Active Server Pages), který je součástí .NET Frameworku firmy Microsoft. Jeho prvotní výhodou je, že webové aplikace jsou předkompilovány do DLL souborů a tím jsou rychlejší oproti čistě skriptovacím jazykům.
5.1.3 Databáze Každý elektronický obchod si potřebuje ukládat spoustu informací o produktech, kategoriích, dodavatelích, zákaznících a nákupech. Takové informace jsou zaznamenávány ve formě tabulek v databázi. Nejpoužívanější databázové systémy jsou popsány níže.
26
MySQL MySQL je jednou z nejrozšířenějších relačních databází typu RDBMS (relational database management system), která je multiplatformní a je nabízena u každého slušného webhostingu. Vychází z databázového jazyka SQL a při dodržení určitých podmínek jí lze pořídit zdarma. Ovšem při šíření databáze jako součásti komerčního softwaru musíme za licenci zaplatit. Tabulky uložené ve formátu InnoDB umožňují použít cizí klíče a transakce. Při implementaci byla použita verze 5.0.41.[5]
PostgreSQL PostgreSQL je relační databázový systém s otevřeným zdrojovým kódem. Má za sebou více než 15 let vývoje a zakládá si na spolehlivosti a bezpečnosti. Funguje pod rozšířenými operačními systémy včetně systémů Windows a Linux. Hlavní nevýhodou je malá rozšířenost na hostingových serverech. [6]
Oracle Tento komerční databázový systém je proslulý především v oblasti zpracování velkých objemů dat a podporou prostředí s vysokými počty transakcí a vysokými požadavky na zabezpečení dat. Převážně je určen středním a velkým společnostem. Nabízí ale také řešení pro menší firmy, které mohou využít volně dostupnou edici 10g Express Edition. Tato verze má svá omezení - lze ji využít pro správu maximálně 4 GB dat a bez ohledu na velikost serveru využije vždy výkon maximálně 1 CPU a 1 GB RAM. [7]
5.1.4 Ostatní použité nástroje CSS CSS (Cascading Style Sheets) neboli česky „kaskádové styly“ se používají k formátování webových stránek napsaných v HTML, XHTML a XML. Pomocí CSS stylů můžeme navrhnout design celého webu a ovládat ho jedním souborem. Tím zpřehledníme kód stránek. Tento způsob je efektivnější než každou stránku upravovat zvlášť, kde většinou hrozí riziko, že při upravování desítek stránek můžeme snadněji udělat chybu a tudíž nebudou vypadat stejně. CSS nahrazuje používaný tag v HTML
za <style>, kterým kromě upravování fontu, velikosti i barvy textu dále umožňuje definovat rámce, neviditelný text, rolovací lištu nebo pozadí. Nevýhodou CSS je to, že vykreslování stránek v prohlížečích se může navzájem lišit. V mé implementaci je použita hotová šablona dostupná zdarma na www.freecsstemplates.org pod podmínkou, že uvedeme zpětný odkaz na výše zmíněné webové stránky.[8]
JavaScript JavaScript je často zaměňován s objektovým programovacím jazykem Java. Je to objektově orientovaný, multiplatformní skriptovací jazyk, který se nejčastěji používá k oživení webových stránek. Pomocí tohoto jazyka můžeme naprogramovat například 27
animace nebo efektové obrázky. Jelikož je JavaScript interpretován na straně klienta (narozdíl od jiných skriptovacích jazyků (PHP, ASP.NET)), může si jej uživatel v nastavení svého prohlížeče kdykoliv vypnout. V implementaci byla použita knihovna Lightbox pro zobrazování prezentací obrázků, využívající framework jQuery.
Apache 2.2.4 + mod_rewrite Apache HTTP Server je nejrozšířenější webový server současnosti. Je multiplatformní a dostupný pod otevřenou licencí. Součástí Apache HTTP serveru je modul mod_rewrite, který mimo jiných vlastností dovoluje používat přepisovací pravidla, která umožňují tvorbu přehledných URL obsahující klíčová slova, která vyhledávač lépe vyhodnotí a snáze zjistí obsah webové stránky. Mod_rewrite nemůže ale běžet na každém serveru. Podmínek je hned několik. Na serveru musí běžet Apache. Dále musí být na Apachi modul mod_rewrite nainstalován a musí být možnost konfigurace serveru (buď souborem httpd.conf nebo vlastním souborem .htaccess). [9]
Propel 1.3.0 Propel je ORM (Object – Relational Mapping) framework pro PHP 5. Umožňuje přístup k databázi pomocí sady objektů a tím výrazně zjednodušuje získávání i ukládání dat. Spolupracuje s různými databázovými systémy, proto je možné jednu aplikaci použít v různém prostředí pouhou změnou konfiguračního souboru. Propel se stará o kódování a správné typování proměnných. Databáze je definována v jednoduchém XML schématu, na jehož základě je vygenerována sada tříd pro objektově orientovaný přístup k databázi.[10]
FCKeditor 2.6 FCKeditor je WYSIWYG (what you see is what you get) editor pro webové aplikace psaný v JavaScriptu. Umožňuje uživateli pohodlnou cestou vytvářet obsah HTML stránek bez znalosti HTML. Navíc obsahuje správce souborů, který se dá použít například k výběru obrázků. FCKeditor podporuje všechny hlavní webové prohlížeče (Internet Explorer, Firefox, Opera a Safari) v jejich aktuálních verzích.[11]
5.1.5 SEO SEO (Search Engine Optimization) optimalizace pro vyhledávače slouží k prvotnímu cílu, aby naše webové stránky byly umístěné v prvních příčkách ve výsledcích zadaného klíčového slova uživatelem. Vyhledávače jsou dnes jedním z nejpoužívanějších služeb na internetu, pomocí nichž si uživatelé snadněji vyhledávají informace. Jestli si uživatel potřebuje koupit například holící strojek, tak si vybere z top stránek ve vyhledávači, které dostal na výběr po zadání klíčového slova „holící strojek“. Pokud chceme, aby náš obchod vzkvétal i na internetu, musíme svůj e-shop optimalizovat správným způsobem. SEO je neplacená metoda z oblasti SEM (Search Engine Marketing). Tedy platíme pouze společnosti nebo soukromému programátorovi, který optimalizaci provede. Jedním z hlavních úkolů při optimalizaci je upravovat webové stránky na základě uživatelských 28
dotazů. Vybrat si dobře definovaná klíčová slova je velmi důležité, proto si musíme dobře rozmyslet, jak by náš web uživatelé hledali. Zjistit, která klíčová slova uživatelé nejčastěji používají můžeme pomocí našeptávačů, kteří nabízejí možnosti při vyhledávání v textovém poli (takovou možnost máme například u google.com nebo seznam.cz). Pokud již máme vytvořené webové stránky, můžeme pomocí služby Google Analytics od společnosti Google vypátrat, přes jaké klíčové dotazy se nejčastěji k nám uživatelé dostávají nebo jaká část na webu je nejnavštěvovanější. Pomocí těchto údajů můžeme své stránky efektivněji upravovat. Důležitým faktorem je, aby každá stránka na webu byla unikátní, protože vyhledávače hodnotí jednotlivě každou stránku. Po definování klíčových slov je dalším důležitým krokem vybrání domény svého webu. V názvu domény by mělo mít přednost klíčové slovo nad názvem firmy, a to z prostého důvodu. Většina vyhledávačů přikládá značnou váhu ke klíčovým slovům v URL. Také se nám to může hodit pokud se někdo o nás zmíní tím, že uvede naši webovou adresu na svůj web. Při optimalizaci webových stránek bychom si měli dávat velký pozor na to, abychom nebyli penalizováni ze strany vyhledávačů. Za porušení pravidel, za které jsme penalizováni, může být například neviditelný text, příliš malý text, často opakovaná slova nebo duplicita webových stránek. Většina kvalitních vyhledávačů používá stejná pravidla, za jejichž porušení jsme penalizováni. Následné zbavení penalizace je běh na dlouhou trať.
5.2 Inicializace Zjednodušeně by se dala funkčnost systému popsat následovně: na základě URL je vybrán modul který se bude vykreslovat a v průběhu vykreslování tohoto modulu je načtena šablona, do které jsou doplněna patřičná data a následně je vykreslena zákazníkovi. Inicializace systému nastává v souboru index.php v kombinaci s rewrite pravidly. Slouží k inicializaci objektu třídy Shop, která řídí chod celé aplikace. URL ve tvaru http://www.obchod.cz/modul/parametr/parametr2 je pak následně přepsáno na URL tvaru http://www.obchod.cz/index.php?module=modul¶ms=parametr/parametr2. Parametr params je následně převeden na pole a spolu s názvem modulu v parametru module je předán instanci třídy Shop. Zároveň je provedeno připojení k databázi a nastavení správné znakové sady. Pokud se spojení nepodaří navázat, je vyvolána výjimka a aplikace je ukončena. Dále je zde ošetřeno odhlašování uživatele.
5.3 Třída Shop Tato třída implementuje návrhový vzor Singleton - v jednu chvíli může existovat pouze jeden objekt této třídy. Při vytváření objektu této třídy je spuštěna PHP session, načteny informace o přihlášení uživatele a vytvoření objektů tříd Request a Basket.
5.3.1 Vykreslení stránky Při inicializační fázi je tomuto objektu metodou Shop::setModule()předán název modulu, který se má vykreslovat a také jsou předány případné parametry pro tento modul. Pokud požadovaný modul neexistuje, je místo něj nastaven modul ErrorModule, 29
který se stará o výpis chybových stránek. Při nastavování modulu se načte soubor s třídou tohoto modulu a je vytvořen objekt této třídy. Po zavolání metody Shop::run()je zavolána metoda Shop::renderModule(), která voláním metody BaseModule::render()získá obsah stránky daného modulu na základě parametrů modulu. Následně je vypsán obsah souboru s vzhledem stránky, do kterého je vložen obsah stránky z modulu. Tento vzhled je společný pro všechny stránky a obsahuje HTML kostru, do které jsou vloženy názvy JS a CSS souborů, které mají být ke stránce připojeny. Vzhled stránky je uložen v souboru templates/layout.php.
5.3.2 Přihlašování uživatele Informace o zákaznících jsou uloženy v databázi. Po přihlášení uživatele jsou informace o něm načteny a jsou přístupné v objektu třídy User. Do session je uloženo ID přihlášeného uživatele. Metoda, která zajišťuje přihlášení uživatele, je pro ukázku zobrazena níže. /** * Vrací true pokud je uživatel úspěšně přihlášen * @param string $username Uživatelské jméno * @param string $password Heslo * @return bool */ public function login($username, $password) { // pokud již je nějaký uživatel přihlášeny, odhlásíme ho if (true == $this->isLoggedIn()) { $this->logout(); } // provedeme přihlášení $this->user = UserPeer::doLogin($username, $password); // pokud bylo přihlášení úspěšné, if ($this->user !== null) { $_SESSION['user_id'] = $this->user->getId(); return true; } else { return false; } }
5.3.3 Bloky Pro opakovaně používané části systému (např. výpis menu) se používají tzv. bloky, což jsou PHP skripty, které danou část obsahují. Vykreslení probíhá metodou Shop::getBlock(), které se předávají parametry název bloku a případně další vstupy pro vykreslení. Tato metoda vrací řetězec s obsahem bloku. Ukázka této metody je zobrazena dále. 30
/** * @param string $block_name * @param array $params * @return string */ public static function getBlock($block_name, $parameters = array()) { $block_file = BASE_PATH . '/templates/blocks/' . $block_name . '.php'; if (false == is_file($block_file)) { throw new RuntimeException('Soubor bloku neexistuje.'); } ob_start(); include($block_file); return ob_get_clean(); }
5.4 Přístup k databázi Přístup k databázi je proveden pomocí ORM frameworku Propel. Tento umožňuje jak přístup k položkám v databázi pomocí objektové abstrakce, tak i přímé dotazy. Pro každou z tabulek datového modelu aplikace existují vygenerované třídy pro ORM. Například pro přístup do tabulky produkt je to třída Product, která obsahuje přímo jednotlivé řádky tabulky produkt a umožňuje přístup k jednotlivým atributům jak pro čtení, tak i pro zápis. Dále je to třída ProductPeer, která provádí výběry objektů třídy Product statickými metodami. Základ všech těchto tříd – jejich PHP kódy – byly vygenerovány generátorem frameworku Propel (který není přiložen k výsledné aplikaci) z databázového schématu uloženém v souboru config/schema.xml. V tomto souboru jsou definované jednotlivé tabulky, jejich sloupce (atributy), indexy a vazby mezi tabulkami. Tyto třídy jsou uloženy ve složce lib/model.
5.5 Třída Request Třída Request obsahuje přístup k HTTP požadavku a jeho parametrům. Pomocí metody Request::getType()je možné zjistit, zda se jedná o HTTP požadavek typu GET nebo požadavek typu POST. Pomocí metody Request::hasParameter()je možné zjistit, zda existuje parametr s daným názvem a pomocí metody Request::getParameter() je možné získat jeho hodnotu. Objekt této třídy je vytvořen při vytváření instance třídy Shop.
5.6 Třída Basket Třída Basket zajišťuje přístup k nákupnímu košíku uživatele. Celý obsah nákupního košíku je uložený v session. Veškeré operace s košíkem pomocí třídy Basket se provádějí přímo v session. Data v session jsou uložena jako asociativní pole, kde klíče jsou identifikátory produktů a hodnoty jsou počty produktů v košíku. Jako speciální produkty jsou zde také uloženy způsob platby a způsob dopravy. 31
Pro manipulaci s obsahem košíku slouží metody: Basket::addProduct()pro vložení daného počtu kusů produktu do košíku, Basket::setProductAmount()pro nastavení počtu kusů produktu, Basket::removeProduct()pro odebrání produktu z košíku a metoda Basket::clearProducts()vyprázdní celý košík. Maximální počet kusů jednoho produktu v košíku je 99. Pokud je vkládáno větší množství, pak je množství nastaveno na 99. Pokud je množství menší než 1, pak je produkt z košíku odebrán. Pro získávání obsahu košíku (pro vykreslení obsahu košíku blokem basket nebo vypsání stručného shrnutí obsahu blokem basket_info) slouží následující skupina metod. Pokud se jakákoliv z těchto metod volá poprvé, dojde k načtení informací o produktech v košíku z databáze. Metoda Basket::getProducts()vrací pole s produkty v košíku, metoda Basket::getCount() vrací počet položek v košíku, metoda Basket::getTotal()vrací celkovou cenu za košík, metoda Basket::getVatList() vrací seznam DPH, metoda Basket::getTotalVat()vrací celkovou DPH. Pro zjištění ceny jednotlivého produktu slouží metoda Basket::getPrice(), pro zjištění počtu kusů produktu v košíku slouží metoda Basket::getAmount(). Pro zjištění zda je již produkt v košíku slouží metoda Basket::hasProduct(). Metodou Basket::isEmpty()je možné zjistit, zda je košík prázdný. Metodami Basket::getDeliveryType()a Basket::getPaymentType()získáme objekt způsobu doručení respektive platby.
5.7 Třída Util Třída Util obsahuje různé statické pomocné metody pro formátování výstupních dat (měna, procenta atd.) a vytváření některých HTML prvků. Mezi nejpoužívanější metody z třídy Util patří Util::getUrlFor(), která jako parametry bere identifikátor modulu a pole parametrů, které se danému modulu mají předat, a vrací URL pro tento modul. Dále jsou zde metody Util::formatMoney()a Util::formatVat()které vrací formátované číslo odpovídající finanční částce respektive hodnotě DPH. Metoda Util::propelSelectBox()z pole databázových objektů vytvoří HTML select box (rozbalovací menu). Používá se převážně ke zjednodušení práce s cizími klíči v tabulkách. Pro odeslání emailu uživateli nebo administrátorovi slouží metoda Util::sendMail(). Tato metoda je pro ukázku zobrazena níže. /** * @param string $from emailova adresa odesilatele * @param string $to emailova adresa prijemce * @param string $subject predmet zpravy * @param string $message telo zpravy * @return bool */ public static function sendMail($from, $to, $subject, $message) { $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; $headers .= 'From: ' . $from . "\r\n"; return mail($to, $subject, $message, $headers); }
32
5.8 Moduly Všechny moduly dědí z abstraktní třídy BaseModule. Tato třída obsahuje základní společné rozhraní pro nastavení modulu, přístupu k jeho parametrům a jeho vykreslení. URL jsou v tomto systému tvořeny následujícím způsobem: http://adresa.cz/jmeno_modulu/-parametr/parametr/parametr. Na základě jména modulu je vybrána odpovídající třída a je vytvořen objekt modulu. Jméno modulu a jeho parametry jsou předány konstruktoru tohoto objektu. Uvnitř modulu je pak možné k jeho parametrům přistupovat na základě jejich pořadí metodou BaseModule::getParameter(). Pro každý modul je možné nastavit, zda se má nebo nemá ukládat do paměti posledního prováděného modulu. Toto se provede nastavením hodnoty atributu BaseModule::$register_last na true nebo false. Dále je možné pro každý modul nastavit připojování dodatečných JavaScriptových a CSS souborů pomocí metody BaseModule::addJsFile(), respektive BaseModule::addCssFile(). Třída BaseModule obsahuje jednu abstraktní metodu BaseModule::render(), která zajišťuje vykreslení konkrétního modulu. Tato metoda musí vracet řetězec s obsahem, který se má vypsat uživateli. Pro oddělení aplikační a prezentační části systému je využit systém šablon. V metodě BaseModule::render()se připraví pole s proměnnými, které se budou vkládat do zvolené šablony. Ta je pak vykreslena metodou BaseModule::renderTemplate(), jejímiž parametry jsou název šablony a pole s parametry.
5.8.1 Výpis kategorie produktů Tento modul zajišťuje vypsání všech produktů v dané kategorii na uživatelovu obrazovku. Je definován třídou ListModule. Jako jediný parametr tohoto modulu je požadován identifikátor kategorie produktů. Pokud není identifikátor zadán, pak je vykreslena šablona s úvodní stránkou. Pokud žádná kategorie se zadaným identifikátorem neexistuje, je vypsána chybová stránka. V opačném případě jsou pak z databáze načteny všechny produkty a předány do šablony. V šabloně je vypsán název kategorie jako hlavní nadpis (H1) a popis kategorie. Následně jsou vypsány produkty spolu s ilustračním obrázkem a cenou.
5.8.2 Detail produktu Tento modul provádí výpis detailu jednotlivého produktu. Je implementován ve třídě DetailModule. Jediným parametrem tohoto modulu je identifikátor produktu. Pokud identifikátor zadán není nebo nebyl nalezen žádný odpovídající produkt danému identifikátoru, pak je vypsána chybová stránka. Pokud produkt existuje, pak jsou jeho hodnoty vloženy do šablony. V šabloně je vypsán název produktu jako hlavní nadpis, dále je zobrazen ilustrační obrázek, který je možné zvětšit pomocí Lightboxu. Dále je vypsána cena bez DPH, hodnota DPH, cena s DPH, zda je produkt skladem či nikoliv, formulář na vložení produktu do nákupního košíku a na závěr popis produktu.
33
5.8.3 Přihlášení uživatele Tento modul slouží pro přihlašování uživatele do systému. Je implementován ve třídě LoginModule. V šabloně je vypsán formulář pro přihlášení. Ten obsahuje pole uživatelské jméno a heslo. Po odeslání formuláře jsou tato pole zpracována a je provedeno přihlášení do systému. Pokud přihlašovací údaje souhlasí, je uživatel přihlášen a přesměrován na poslední navštívenou stránku. Pokud údaje nesouhlasí, je u přihlašovacího formuláře vypsáno chybové hlášení.
5.8.4 Registrace uživatele Tento modul slouží k registraci nového uživatele nebo k úpravě údajů stávajícího uživatele. Je implementován ve třídě RegisterModule. Pokud není uživatel přihlášen, je po korektním vyplnění formuláře založen nový uživatel do tabulky Zákazník a rovnou je přihlášen. Pokud došlo při vyplňování formuláře k nějaké chybě, pak je tato chyba uživateli zobrazena. Pokud je již uživatel přihlášen, zobrazí se mu formulář s předvyplněnými poli a uživateli je umožněno tyto údaje měnit.
5.8.5 Nákupní košík Tento modul slouží k operacím s nákupním košíkem. Je implementován ve třídě BasketModule. Podle požadované operace (zobrazení košíku, přidání zboží do košíku, editování množství zboží v košíku, odebrání zboží z košíku) je zavolána patřičná metoda třídy Basket, která se stará o samotnou implementaci nákupního košíku. Po provedení operace je patřičně upravený obsah nákupního košíku vypsán uživateli v tabulce, která obsahuje v řádcích jednotlivé položky košíku a ovládací prvky pro provádění operací s položkami. Dále jsou pod tabulkou zobrazena tlačítka pro návrat zpět k nakupování (vrací uživatele na předchozí URL) a přesun k pokladně pro dokončení objednávky.
5.8.6 Pokladna Tento modul slouží k dokončení objednávky. Je implementován ve třídě CheckoutModule. Tento modul je rozdělen na 4 fáze následující po sobě. Každá z těchto fází vyžaduje interakci od uživatele a je logicky rozdělena podle jednotlivých úkonů potřebných pro dokončení objednávky. K předchozím fázím je možné se dostat pomocí ovládacích prvků zobrazených pod výpisem obsahu objednávky. Pro vykreslení každé fáze se používá samostatná šablona. První fází je výběr způsobu dopravy. Způsoby dopravy jsou načítány z databáze a jsou vypsány uživateli. Po vybrání způsobu dopravy je vložen do nákupního košíku jako virtuální položka, která se nastavuje metodou Basket::setDeliveryType(). Obsah košíku je přepočítán a modul se přesune do druhé fáze. Druhou fází je výběr způsobu platby. Na základě vybraného způsobu dopravy jsou z databáze načteny povolené způsoby platby (vazba N:M) a vypsány uživateli. Po vybrání způsobu platby je tento způsob také vložen do nákupního košíku jako virtuální 34
položka metodou Basket::setPaymentType(). Košík je opět přepočítán a modul se přesune do třetí fáze. Třetí fází je zadání údajů pro doručení objednaného zboží. Podle vybraného způsobu dopravy jsou uživateli zobrazena pole pro povinné položky nezbytné pro dokončení objednávky. Pokud například uživatel vybral osobní odběr, nebudou mu zobrazena pole pro adresu, jelikož tyto údaje nejsou pro doručení nezbytné. Pokud uživatel nezadá všechny povinné údaje, pak je na tuto skutečnost upozorněn chybovou hláškou. Po zadání všech povinných údajů se modul dostává do závěrečné čtvrté fáze. Čtvrtou fází je potvrzení objednávky. Uživateli jsou zobrazeny všechny údaje o objednávce – jednotlivé položky, jejich ceny, celková cena bez DPH a s DPH, dále pak podrobnosti o způsobu platby a o způsobu dopravy. Po potvrzení objednávky je objednávka vložena do databáze a zákazníkovi i administrátorovi je zaslán informační email.
5.8.7 Objednávky Tento modul slouží k výpisu objednávek uživatele. Je implementován ve třídě OrdersModule. Je přístupný pouze přihlášeným uživatelům. Pokud je modul spouštěn bez parametrů, pak je zobrazen výpis všech objednávek, které daný uživatel zadal s odkazem na detail objednávky a vypsaným stavem, ve kterém se objednávka nachází. Pokud je modulu předán parametr s číslem objednávky a tato objednávka patří přihlášenému uživateli, pak je vypsán obsah této objednávky.
5.8.8 Chybová stránka Tento modul slouží k výpisu chybových hlášení. Je implementován ve třídě ErrorModule. Jako parametr je požadován HTTP kód chyby. Implementovány jsou chyby 404 – stránka nenalezena a 403 – přístup odepřen, ale v případě potřeby je snadno možné vložit další chybové stránky. Zároveň s výpisem patřičné šablony jsou nastaveny i HTTP hlavičky na správný chybový kód.
5.8.9 Administrace Tento modul slouží k administraci celého systému. Je implementován ve třídě AdminModule. Je přístupný pouze administrátorovi. Na základě prvního parametru tohoto modulu je vybrána část administrace, která se bude vykreslovat. Pro každou část administrace obsahuje třída s modulem metodu pro vykreslení této části.
35
6. Závěr Cílem bylo zrealizovat funkční internetový obchod menší velikosti, který by umožnil zákazníkovi příjemné a spolehlivé nakupování a prodejci rychlé vyřizování objednávek. Implementovaný internetový obchod může tedy sloužit maloobchodnímu prodejci, který očekává zefektivnění prodeje svého zboží, dále očekává evidenci svých zákazníků a přehlednější nabídku svých produktů. Mnou zrealizovaný projekt je dostupný na CD přiloženém k práci nebo na URL: www.amiraga.cz. Internetový obchod lze samozřejmě do budoucna dále rozšiřovat. Např. fulltextové vyhledávání produktů, možnost uživatelů psát své názory a zkušenosti s již zakoupeným výrobkem nebo možnost zasílání informací o akčních cenách za použití uživatelova emailu.
36
7. Použité prameny a literatura [1]
Internet World Stats. [online], [cit. 2008-09-21]. URL: < http://www.internetworldstats.com/stats.htm >.
[2]
Blažková, Martina: Jak využít internet v marketingu. Grada Publishing, a.s., 2005
[3]
Ráček, Jaroslav : Strukturovaná analýza systémů. Masarykova univerzita, Brno, 2006
[4]
PHP: Hypertext Preprocessor. [online], [cit. 2008-10-06]. URL: < http://www.php.net >.
[5]
MySQL: MySQL 1.3.1. What is MySQL?. [online], [cit. 2008-10-06]. URL: < http://dev.mysql.com/doc/refman/5.0/en/what-is-mysql.html >.
[6]
PostgreSQL: Wikipedie, otevřená encyklopedie. [online], [cit. 2008-09-25]. URL: < http://cs.wikipedia.org/wiki/PostgreSQL#cite_note-0 >.
[7]
Oracle: Database 10g Express Edition. [online], [cit. 2008-09-25]. URL: < http://www.oracle.com/global/cz/database/express_edition.html >.
[8]
Free CSS Templates: License. [online], [cit. 2008-10-07]. URL: < http://www.freecsstemplates.org/license/ >.
[9]
Apache: HTTP Server Project. [online], [cit. 2008-10-06]. URL: < http://httpd.apache.org/ >.
[10]
Propel: Welcome to the Propel Website!. [online], [cit. 2008-10-06]. URL: < http://propel.phpdb.org/trac/ >.
[11]
FCKeditor: The text editor for Internet. [online], [cit. 2008-10-07]. URL: < http://www.fckeditor.net/ >.
[12]
Welling, L. a Thomson, L.: PHP a MySQL Rozvoj webových aplikací. SoftPress s.r.o.,2005
[13]
Jason Gilmore, W.: Velká kniha PHP a MySQL 5. ZONER software, s.r.o., 2007
37
8. Příloha 8.1 Obsah přiloženého CD CD-ROM:\*.* •
eshop o config o o o o
o o
o o o • • • • •
css img js lib fckeditor model propel shop thumbnail modules templates admin blocks uploads index.php .htaccess
BP–eshop.pdf DFD.jpg ERD.jpg Kontext.jpg sql_db.txt
– konfigurační soubory pro připojení k databázi, databázové schéma – kaskádové styly – obrázky – javascriptové skripty – knihovny použité v systému – skripty WYSIWYG editoru FCKeditor – třídy pro přístup k databázi vygenerované pomocí Propelu – runtime knihovna Propelu – hlavní třídy systému – třídy pro vytváření náhledu obrázků – třídy jednotlivých modulů systému – šablony systému – šablony administrační části systému – bloky systému – obrázky produktů – hlavni vstupní bod systému – rewrite pravidla – text této práce ve formátu PDF – diagram datových toků – entitně relační diagram – kontextový diagram – zakládající SQL soubor
38
8.2 Ukázky kódu Vzorový modul systému (modules\ListModule) který slouží k vypsání seznamu položek ve vybrané kategorii produktů. class ListModule extends BaseModule { /** * Konstruktor * * @param string $name Jméno modulu * @param array $parameters Parametry modulu */ public function __construct($name, $parameters = array()) { parent::__construct($name, $parameters); } /** * Vykreslí modul * * @return string */ public function render() { // prvním parametrem je identifikátor kategorie if (false == $this->hasParameter(0)) { $this->setTitle('Vítejte'); return $this->renderTemplate('index'); } $category = CategoryPeer::retrieveByIdentifier($this>getParameter(0)); // pokud kategorie neexistuje if (null == $category) { Shop::instance()->error404(); } $this->setTitle($category->getName()); // načteme produkty spadající do teto kategorie $c = new Criteria; $c->add(ProductPeer::IS_ACTIVE, true); $products = $category->getProducts($c); return $this->renderTemplate('list',array( 'category' => &$category, 'products' => &$products,)); } } 39
Vzorová šablona (templates\list.php) vypisuje data připravené modulem ListModule. getName(); ?>
getDescription(); ?>
40