You are on page 1of 16

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

PHP i MySQL. Tworzenie


sklepw internetowych
Autorzy: Daniel Bargie, Sebastian Marek
ISBN: 83-7361-359-5
Format: B5, stron: 244

Coraz wicej firm oferuje swoje towary w internecie. Taka metoda prezentowania
oferty umoliwia dotarcie do wikszej liczby klientw i zredukowanie kosztw
wynikajcych z prowadzenia tradycyjnej dziaalnoci handlowej. Rozwj handlu
elektronicznego spowodowa zwikszenie zainteresowania usugami zwizanymi
z tworzeniem sklepw internetowych.
Do realizacji sklepu internetowego wielu programistw wykorzystuje duet PHP i MySQL.
PHP jest najpopularniejszym jzykiem skryptowym interpretowanym po stronie serwera.
Cigle rozwijany i rozbudowywany PHP jest wykorzystywany przez tysice autorw
dynamicznych aplikacji WWW korzystajcych z baz danych. Rol zaplecza
bazodanowego doskonale speni baza MySQL prosta i wydajna, a co najwaniejsze,
dostpna nieodpatnie podobnie, jak PHP. Napisanie efektywnego i bezpiecznego
sklepu internetowego to ciekawe wyzwanie dla programisty. Moe i Ty sprbujesz si
z nim zmierzy?
Jeli mylisz o podjciu tego wyzwania, to ksika PHP i MySQL. Tworzenie sklepw
internetowych jest dla Ciebie idealn lektur. Zawiera wszystkie informacje, jakich
potrzebujesz, by zaprojektowa i napisa funkcjonalny, wydajny i bezpieczny sklep
internetowy, korzystajc z jzyka PHP i bazy danych MySQL.
Konfiguracja rodowiska projektowego i uruchomieniowego
Szablony Smarty, biblioteka PEAR i narzdzia kontroli sesji
Projekt aplikacji z rozbiciem na moduy
Zagadnienia zwizane z bezpieczestwem sklepu i transakcji
Obsuga formularzy
Zastosowanie sownikw
Katalog produktw
Wykonanie moduu koszyka na zakupy
Modu administracyjny
Obsuga zamwie
Wyszukiwarka towarw

Spis treci
Wstp ................................................................................................................. 7
Rozdzia 1. Koncepcja sklepu internetowego...................................................... 11
Cz publiczna.................................................................................................................11
Cz administracyjna.......................................................................................................12

Rozdzia 2. Co naley wiedzie........................................................................... 15


rodowisko pracy Windows i Linux............................................................................15
System operacyjny ......................................................................................................15
Serwer WWW.............................................................................................................17
PHP: Hypertext Preprocessor .....................................................................................19
MySQL .......................................................................................................................19
Podstawowa konfiguracja rodowiska........................................................................21
Smarty oddzielenie kodu PHP od HTML-a .................................................................24
Instalacja systemu szablonw Smarty ........................................................................25
Konfiguracja systemu szablonw Smarty...................................................................26
Pierwszy szablon.........................................................................................................27
Zoone szablony ........................................................................................................29
Komunikacja z baz danych..............................................................................................31
Standaryzacja interfejsu dostpu do danych ...............................................................31
PEAR oraz pakiet Database ........................................................................................32
Mechanizmy obsugi i raportowania bdw ....................................................................38
Typy bdw ...............................................................................................................38
Obsuga bdw poprzez standardowe funkcje jzyka PHP.......................................40
Obsuga bdw w zbiorze bibliotek PEAR ...............................................................46
Mechanizmy autoryzacji uytkownika i sesje...................................................................50
Identyfikacja uytkownika..........................................................................................50
Mechanizmy sesji........................................................................................................63
XML jako narzdzie konfiguracji aplikacji ......................................................................69
Cele korzystania z plikw konfiguracyjnych..............................................................69
Dane konfiguracyjne w dokumentach XML...............................................................70
Dane informacyjne w plikach XML ...........................................................................72

Rozdzia 3. Projekt aplikacji .............................................................................. 75


Interfejs uytkownika........................................................................................................76
Nagwek strony .........................................................................................................77
Menu gwne sklepu ...................................................................................................78
Cz centralna sklepu................................................................................................78
Stopka strony ..............................................................................................................80

PHP i MySQL. Tworzenie sklepw internetowych


Struktura i konfiguracja aplikacji......................................................................................80
Struktura katalogowa ..................................................................................................80
Konfiguracja serwisu ..................................................................................................83
Przetwarzanie da....................................................................................................84
Struktura bazy danych.......................................................................................................85
Uytkownicy i klienci sklepu......................................................................................86
Produkty......................................................................................................................87
Kategorie.....................................................................................................................90
Producenci...................................................................................................................91
Zamwienia.................................................................................................................92
Sowniki ......................................................................................................................94
Biblioteka zdj ..........................................................................................................95
Budowa moduowa aplikacji.............................................................................................96
Rdze aplikacji............................................................................................................97
Przykadowy prosty modu aplikacji ..........................................................................98

Rozdzia 4. Bezpieczestwo ............................................................................. 103


Bezpieczestwo systemu operacyjnego oraz serwera WWW.........................................103
Cel instalacji serwera ................................................................................................104
Tylko potrzebne usugi .............................................................................................104
Bezpieczna konfiguracja serwera WWW .................................................................105
Bezpieczestwo wykorzystywanego oprogramowania...................................................105
Instalacja PHP jako pliku wykonywalnego CGI ......................................................105
Instalacja PHP jako moduu Apache.........................................................................107
Opcja register_globals ..............................................................................................108
Raportowanie bdw ...............................................................................................110
Ukrywanie PHP ........................................................................................................111
Aktualizacje ..............................................................................................................111
Bezpieczestwo wasnej aplikacji...................................................................................112
Brak walidacji danych...............................................................................................112
Nieskuteczne mechanizmy kontroli dostpu i autoryzacji........................................113
Nieprawidowe zarzdzanie kontami oraz sesjami uytkownikw ..........................115
Ataki typu Cross-Site Scripting (XSS) .....................................................................116
Wstrzykiwanie kodu .................................................................................................117
Przechowywanie niezabezpieczonych danych .........................................................119
Bezpieczestwo bazy danych..........................................................................................119
Zarzdzanie hasami........................................................................................................120

Rozdzia 5. Obsuga formularzy ........................................................................ 121


Format dokumentu XML definiujcego formularz.........................................................121
Pola formularza i reguy walidacyjne .......................................................................122
Dokument form.xml..................................................................................................124
Modu formularza............................................................................................................128
Metody obiektw klasy Forms..................................................................................128
Konfiguracja obiektu formularza w skryptach PHP .................................................130
Wywietlanie formularza w szablonach Smarty.......................................................132
Testowanie aplikacji z formularzem.........................................................................134

Rozdzia 6. Sowniki i ich zastosowanie............................................................ 139


Object klasa bazowa dla obiektw .............................................................................140
Dane adresowe klasa State, Country oraz AddressType............................................141
Sowniki wykorzystywane przy skadaniu zamwie
klasa DeliveryType, PaymentType, OrderStatus.....................................................145
Waluty i stawki podatku VAT klasa Currency oraz TaxRate....................................146
Parametry asortymentu klasa Parameter ....................................................................147

Spis treci

5
Producenci produktw klasa Producer.......................................................................148
Biblioteka zdj klasa Image......................................................................................148
Przesyanie zdj na serwer pakiet HTTP_Upload..............................................150
Zapisywanie zdj w bazie danych...........................................................................153
Pobieranie zdj z bazy danych ................................................................................153

Rozdzia 7. Kategorie i produkty ...................................................................... 155


Asortyment i produkt rnice i zastosowania ............................................................155
Asortyment sklepu klasa Item..............................................................................155
Dodawanie nowego asortymentu do sklepu .............................................................158
Produkty dostpne w ofercie sklepu klasa Product................................................162
Produkty w promocji.......................................................................................................167
Obsuga promocji modu Special.........................................................................168
Zarzdzanie promocjami...........................................................................................170
Kategorie produktw.......................................................................................................171
Struktura katalogowa klasa Catalog.....................................................................172
Wywietlanie struktury katalogowej.........................................................................173
Zarzdzanie kategoriami...........................................................................................174

Rozdzia 8. Koszyk .......................................................................................... 177


Sesja jako podstawowy mechanizm realizacji koncepcji koszyka..................................178
Modu koszyka klasa Basket ......................................................................................179
Operacje na produktach w koszyku ..........................................................................180
Operacje na sumarycznych wartociach cen produktw w koszyku ........................182
Skadanie zamwienia ..............................................................................................182
Wywietlanie koszyka w szablonie TPL.........................................................................184

Rozdzia 9. Rejestracja i zarzdzanie klientami ................................................. 189


Koncepcja uytkownikw aplikacji ................................................................................190
Klasy uytkownika User oraz CustomUser .......................................................190
Rejestracja nowego uytkownika....................................................................................193
Pierwszy etap rejestracji wypenienie formularzy rejestracyjnych......................194
Drugi etap rejestracji aktywacja konta uytkownika.................................................208
Proces gromadzenia danych za pomoc wielu formularzy .............................................210
Zarzdzanie klientami .....................................................................................................211

Rozdzia 10. Obsuga zamwie ......................................................................... 213


Warunki zoenia zamwienia ........................................................................................213
Modu zamwienia klasa Order .................................................................................216
Waciwoci i metody obiektw klasy Order ...........................................................216
Zarzdzanie zamwieniami ......................................................................................218

Rozdzia 11. Wyszukiwanie informacji ................................................................ 221


Formularz wyszukiwarki.................................................................................................221
Analizator danych ...........................................................................................................222
Wyszukiwanie informacji klasa Search .....................................................................225
Stworzenie i wysanie zapytania do bazy danych metoda makeSQLQuery() .....226
Pobieranie wynikw wyszukiwania metoda fetchQueryResult() ........................229

Rozdzia 12. Instalacja sklepu internetowego..................................................... 231


Instalacja sklepu od strony serwera WWW ....................................................................231
Instalacja sklepu od strony bazy danych .........................................................................232
Plik konfiguracyjny sklepu internetowego......................................................................232

Skorowidz ........................................................................................................ 235

Rozdzia 8.

Koszyk
Koncepcja koszyka w sklepie internetowym zostaa zapoyczona z rzeczywistoci.
Podczas wizyty w zwykym sklepie przegldamy pki sklepowe w poszukiwaniu interesujcych nas towarw. Towar, ktry znajduje si na pkach, nie jest rozoony na
nich dowolnie, lecz pogrupowany wedug pewnych kryteriw. Na przykad nabia
moe znajdowa si w lodowce, a soki owocowe na grnej pce pod cian.
W hipermarketach cae dziay zorganizowane s w ten sposb. Rozoenie towaru
(odpowiadajcego produktom w naszym sklepie internetowym) w odpowiednim miejscu sklepu, ktre dodatkowo moe by stosownie opisane, odpowiada kategoriom
w naszym wirtualnym sklepie.
Wyobramy sobie teraz, e klient zauwaa interesujcy go towar, ktry chce kupi.
Chwyta towar, biegnie do kasy, paci, zostawia za sklepem (daje komu, ewentualnie
wiezie do domu), po czym wraca po nastpny. atwo sobie wyobrazi, e zrobienie
nieco wikszych zakupw w takim przypadku zabraoby kilka dni lub nawet tygodni.
Dlatego te klienci sklepw i hipermarketw uywaj koszykw lub wzkw, do ktrych mog powkada produkty. Gdy ju umieszcz w koszykach wszystko, co chc
kupi, nios je do kasy, gdzie towar jest podliczany i gdzie nastpuje zapata (gotwk, kart, czekiem).
Mechanizm koszyka jest rwnie wykorzystywany w sklepie internetowym. Dziki
takiemu rozwizaniu internauta odwiedzajcy sklep internetowy, gdy znajdzie jaki
interesujcy go produkt, moe doda go do koszyka, a nastpnie powrci do dalszego
przegldania asortymentu sklepu. Koszyk bdzie pamita, jakie produkty wybra
klient. Z kolei sam klient moe nastpnie zamwi wszystkie produkty znajdujce si
w koszyku.
Koszyk zakupw w sklepie internetowym ma jeszcze t przewag nad koszykiem
zakupw w rzeczywistym sklepie, e uytkownik moe zwiksza lub zmniejsza
liczb sztuk produktw w koszyku bez potrzeby ponownego odwiedzania kategorii,
ktre zawieraj te produkty.

178

PHP i MySQL. Tworzenie sklepw internetowych

Przykadowa zawarto koszyka w aplikacji sklepu internetowego dodanego do ksiki


zostaa pokazana na rysunku 8.1.
Rysunek 8.1.
Zawarto koszyka
w aplikacji sklepu
internetowego
doczonego do ksiki

Sesja jako podstawowy mechanizm


realizacji koncepcji koszyka
Koszyk ma to do siebie, e powinien pamita swoj zawarto niezalenie od tego,
na ktrej stronie sklepu w danym momencie znajduje si uytkownik. Co wicej, jeeli opuci on serwis sklepu internetowego, a po pewnym czasie powrci do niego, to
koszyk wci powinien zawiera produkty, ktre uytkownik do niego doda.
Idealnym rozwizaniem jest przechowywanie obiektu koszyka w zmiennej sesyjnej. Dziki
temu wszystkie opisane powyej problemy rozwizujemy za jednym zamachem.
W sklepie internetowym, ktry zosta doczony do ksiki, klas obiektu koszka (

) mona znale w pliku moduu koszyka o nazwie basket.inc.php.

Pliki aplikacji sklepu internetowego doczonego do ksiki mona znale na CD-ROM-ie, w katalogu sklepinternetowy. Skrypt moduu koszyka znajduje si w katalogu sklepinternetowy/modules/basket/.

W naszym sklepie internetowym modu koszyka jest jawnie okrelany w pliku konfiguracyjnym, tak jak zostao to pokazane na listingu 8.1.
Listing 8.1. Plik module.cfg.xml

   
  


Rozdzia 8. Koszyk

179


   



 

  

 



 
  

W gwnym pliku czci publicznej (mindex.php) modu koszyka jest adowany przez
metod  

 rdzenia aplikacji (listing 8.2):
Listing 8.2. adowanie moduu koszyka przez metod 'loadModule' obiektu rdzenia aplikacji
 !""
 # #$%%&  $' ()$
*(+++,
- #$%%& .$
 '

$++/ +/
0

Modu koszyka powinien by zaadowany jeszcze przed rozpoczciem sesji (


 ), poniewa sesja przechowuje obiekt koszyka, a wic definicja klasy
obiektu musi ju by znana interpreterowi PHP.

Obiekt koszyka tworzony jest tylko jeden raz w czasie trwania konkretnej sesji
(listing 8.3).
Listing 8.3. Tworzenie obiektu koszyka w skrypcie mindex.php
%-%

! 1% 12 

3

4
$ +/
56 **
17*$8 1 73
 $% 19*
:

#4;;;<5=>()$
*(?++,



4 
 ()$
*(+/
 !"#  #$ %  &'(
0



Od tej pory koszyk moe by uywany przez internaut, ktry robi zakupy w sklepie.

Modu koszyka klasa Basket


Jak wikszo tego typu obiektw w sklepie internetowym rwnie modu koszyka nie
stanowi samodzielnego moduu. Wsppracuje cile z moduem produktu (
)
oraz z moduem zamwie (
), dlatego te na pocztku pliku definiujcego klas
 znajduje si kod doczajcy pliki obu moduw.

180

PHP i MySQL. Tworzenie sklepw internetowych

Poniewa modu 
 rwnie korzysta z moduu 
, mona by pomin
w skrypcie moduu  fragment kodu adujcego modu 
. Jednak poniewa w pliku moduu  mamy bezporednie odwoania do obiektw klasy

, dobrze jest jawnie okreli, jakie moduy s wykorzystywane przez obiekt.
Modu zawierajcy definicj obiektu klasy 
 zosta opisany w poprzednim
rozdziale, natomiast modu zawierajcy definicj obiektu klasy 
 zostanie opisany w rozdziale Obsuga zamwie.

Obiekty klasy  posiadaj jedynie dwie waciwoci:


 
 jest to tablica, ktra zawiera obiekty produktw dodanych

do koszyka;
    limit sztuk jednego produktu w koszyku (warto domylnie

jest ustawiana na 10).


Metody obiektw klasy  mona podzieli na trzy grupy:
 Metody bezporednio operujce na zawartoci koszyka, czyli na produktach,
ktre si w koszyku znajduj: , 


, 
 ,

 , .
 Metody operujce na wartociach cen netto i brutto produktw znajdujcych si
w koszyku:   ,    oraz     .
 Metoda skadajca wykonujca proces skadania zamwienia: 
.
Opis poszczeglnych metod obiektw klasy , lista ich atrybutw oraz rodzaj
zawracanej wartoci zostay opisane w pliku moduu koszyka basket.inc.php.

Operacje na produktach w koszyku


Korzystajc z metod wymienionych powyej, w pierwszej grupie programista moe
doda produkt do koszyka poprzez proste wywoanie metody 


. Musi jedynie
dysponowa 32-znakowym identyfikatorem produktu (wynik dziaania funkcji 
).
Jeeli dodanie produktu do koszyka si nie powiedzie (bo np. produkt o podanym identyfikatorze nie istnieje), metoda 


 zwrci obiekt klas !"#! . W skrypcie
realizujcym operacj dodawania produktu do koszyka stosowny fragment kodu wyglda jak na listingu 8.4 (plik sklepinternetowy/www/public/basket/addtobasket.php):
Listing 8.4. Fragment pliku addtobasket.php dodanie produktu do koszyka
%-%

;% $81 @17% $ 1  97%AB
$ 8 99  7 *$  6 *% *


#4AB>(%  (?++,
  !""
  !"#  #$)*&+,"##$'++,
5% $3$ $ $% * *
17*$ % 8 C$
2

Rozdzia 8. Koszyk

181

D7E8  *  *$ 6C21 


0
,
5% $3$ $ $% * *
17*$% 8 C$
2
D7E8    $3 % 8  1$393 $ % * *
17*$
0
0



Jak wida, z punktu widzenia programisty korzystajcego z interfejsu obiektu koszyka dodanie produktu do koszyka jest naprawd banalne. Caa praca sprowadza si do
wywietlenia odpowiedniego komunikatu informujcego uytkownika o tym, czy operacja dodania produktu do koszyka powioda si czy te nie.
Jeeli wystpi bd (czyli metoda 


 zwrcia obiekt klasy !"#! ), kompletn tre komunikatu o tym bdzie mona uzyska poprzez wywoanie $ %
&!  '(.
Metoda 


 sama sprawdzi, czy produkt, ktry ma by dodany, nie znajduje
si ju w koszyku i, jeeli tak jest, zamiast dodawa nowy obiekt do koszyka (czyli
tworzy nowy obiekt klasy 
) zwikszy jedynie liczb sztuk tego produktu.
Operacja ta jest powtarzana, dopki liczba sztuk danego produktu w koszyku nie
osignie wartoci maksymalnej (okrelonej we waciwoci    obiektu
koszyka).

Modyfikacja zawartoci koszyka oznacza zmian liczby produktw znajdujcych si


koszyku lub te usunicie ich. Za realizacj tego zadania odpowiedzialna jest metoda

  obiektw klasy .
Przykadowy kod wykorzystujcy t metod wyglda jak na listingu 8.5 (patrz plik
sklepinternetowy/www/public/basket/displaybasket.php):
Listing 8.5. Fragment pliku displaybasket.php zmiana liczby sztuk danego produktu w koszyku
%-%

 !""
 #4;;;<5=>()$
*(?-$  &  #4AB>(%  (?@
#4AB>($(?+++,
D7
9% C6C9F  G $1 7 * 8$H1$8$  E 
C 8 *$
0


Jak wida w powyszym przykadzie, metoda 


  przyjmuje dwa parametry: identyfikator obiektu produktu (obiektu klasy 
), ktrego liczba sztuk
ma zosta zmieniona, oraz nowa liczba sztuk wybranego produktu. Jeeli nowa liczba
sztuk produktu wynosi zero, produkt jest usuwany z koszyka.
Jeeli internauta bdzie chcia wyczyci koszyk zakupw, to programista obsugujcy
akcje uytkownika moe to zrobi, wywoujc metod  obiektu koszyka.
Metoda nie przyjmuje adnych parametrw.

182

PHP i MySQL. Tworzenie sklepw internetowych

Operacje na sumarycznych wartociach


cen produktw w koszyku
Poniewa wywietlajc internaucie zawarto koszyka, naley rwnie pokaza sumaryczn warto cen produktw w koszyku, w klasie  zostay zdefiniowane dwie
bardzo przydatne metody.
Te metody to:    '(oraz   '(. Pierwsza z nich sumuje
wszystkie ceny netto produktw znajdujcych si w koszyku przemnoone przez liczb
sztuk kadego z produktw, natomiast druga robi dokadnie to samo z t rnic, e
bierze pod uwag ceny brutto produktw, czyli do ceny kadego z produktw dolicza
odpowiedni stawk podatku VAT.
Obie metody uwzgldniaj fakt, e produkty znajdujce si w koszyku mog mie
obowizujce ceny promocyjne. W takim przypadku cena wliczana do sumy cen (zarwno netto, jak i brutto) jest oczywicie cen promocyjn produktu znajdujcego si
w koszyku.
Stawki podatku VAT s zdefiniowane w sowniku stawek podatku VAT. Kady produkt posiada odwoanie do odpowiedniej wartoci w sowniku stawek podatku
VAT. Mechanizm sownikw oraz ich zastosowanie w sklepie internetowym zostao
omwione w rozdziale Sowniki i ich zastosowanie.

Mechanizm promocji zosta omwiony w rozdziale Kategorie i produkty w podrozdziale Produkty w promocji.

W przypadku sklepu internetowego obie metody s wywoywane jedynie w szablonach


Smarty, czyli w plikach TPL. O samym szablonie TPL wykorzystywanym do wywietlania kodu HTML koszyka powiemy w dalszej czci rozdziau.

Skadanie zamwienia
Z punktu widzenia programisty PHP obsugujcego modu koszyka skadanie zamwie
jest najtrudniejsz procedur do oprogramowania. Dzieje si tak poniewa, aby zoy
zamwienie, trzeba zebra dodatkowe dane od internauty wypeniajcego zamwienie.
W przypadku aplikacji sklepu internetowego doczonego do ksiki s to dane adresowe klienta, dziki ktrym wiadomo, na jaki adres wysa zamwienie.
Z punktu widzenia obiektu koszyka sposb, w jaki owe dane zostan zgromadzone, nie
jest istotny. Wany jest sposb dostarczenia tych danych do obiektu koszyka. Operacja
skadania zamwienia sprowadza si do wywoania metody 
'$ 
"

(
obiektu koszyka. Atrybut $ 
"

 (adres zamwienia) musi by tablic asocjacyjn


zawierajc nastpujce pola:

Rozdzia 8. Koszyk

183


 (rodzaj dostawy) identyfikator pola sownikowego ) *. Sownik
) * zawiera informacje o tym, w jaki sposb zawarto zamwienia

powinna by dostarczona do klienta;


  (rodzaj patnoci) identyfikator pola sownikowego . Sownik
 zawiera informacje o tym, w jaki sposb klient zamierza dokona

patnoci w sklepie internetowym;


  (nazwa ulicy) nazwa ulicy, na ktr towar ma zosta dostarczony;
   (numer domu) numer domu, do ktrego towar ma zosta

dostarczony;
    (numer lokalu) opcjonalny numer lokalu, do ktrego towar ma

zosta dostarczony;
   (miasto) miasto, do ktrego towar ma zosta dostarczony;
  (wojewdztwo, stan, okrg) identyfikator pola sownikowego
+. Sownik + zawiera list wojewdztw (stanw lub obszarw)

danego kraju;
   (kraj) identyfikator pola sownikowego  . Sownik  

zawiera list krajw.


W przypadku aplikacji sklepu internetowego doczonej do ksiki wszystkie te dane
s gromadzone w trakcie skadania zamwienia przez formularz (rysunek 8.2).
Rysunek 8.2.
Moment skadania
zamwienia przez
klienta sklepu
internetowego

Poniewa tylko uytkownicy zarejestrowani w sklepie internetowym mog zoy zamwienie, dlatego te pola formularza z rysunku 8.2 wstpnie zostaj wypenione danymi
adresowymi, ktre uytkownik zarejestrowany (klient) podaje w trakcie rejestracji.

184

PHP i MySQL. Tworzenie sklepw internetowych

O procesie rejestracji uytkownika w systemie i aktywacji konta uytkownika mona


przeczyta wicej w rozdziale Rejestracja i zarzdzanie klientami.

Dane te mog by zmodyfikowane przez uytkownika lub pozostawione bez zmian.


Formularz jest wygenerowany i obsugiwany przez modu  , ktry zosta dokadnie opisany w rozdziale Obsuga formularzy.
Po zoeniu zamwienie jest zapisywane w bazie danych z odpowiednim statusem.
Koszyk sklepu internetowego cile wsppracuje z obiektem zamwie. eby jednak
uytkownik mg zoy zamwienie, musi si wczeniej zarejestrowa w sklepie
internetowym. Kolejny rozdzia Rejestracja i zarzdzanie klientami prezentuje
sposb, w jaki w aplikacji sklepu internetowego doczonej do ksiki rozwizano
ten problem.

Po zoeniu zamwienia koszyk jest czyszczony, a uytkownik moe ponownie przystpi do zakupw.

Wywietlanie koszyka w szablonie TPL


Mimo e do obiektu klasy  (o nazwie ), ktry jest przechowywane w sesji,
w samym szablonie TPL mona si dosta poprzez konstrukcje ,$- ., to dla wygody w gwnym pliku czci publicznej (mindex.php) obiekt ten
jest przekazywany przez referencj do szablonw Smarty pod nazw /$
% 01'223$+!++45226(7

Dziki temu w szablonach TPL do koszyka mona si ju odwoywa poprzez nazw


$.
Wywietlanie informacji w koszyku moemy podzieli na dwie gwne sekcje: podsumowanie oraz szczegowa zawarto koszyka.
W przytoczonych poniej listingu szablonu basket.tpl (listing 8.6) pominlimy
wikszo znacznikw kodu HTML, aby nie komplikowa samego kodu szablonu
Smarty. Odpowiednie fragmenty kodu zostay odpowiednio skomentowane.
Listing 8.6. Kod (wycito znaczniki HTML) szablonu basket.tpl
,I&$C* 8 $8$  EH*
17*$"I0
,I& $  I0-  ).,*!&'/ .0
12
3
,I& $6  I0-  ).,* &'/ .0
12
3

Sekcja podsumowania zawiera sumaryczn warto cen netto oraz brutto z koszyka.
Do ich uzyskania wystarczy skorzysta z metod    '( oraz  
   '(. Poniewa jednak nie moemy zagwarantowa, e wartoci zwrcone

Rozdzia 8. Koszyk

185

przez obie funkcj bd poprawnymi wartociami walutowymi (precyzja do 2. miejsca


po przecinku), szczeglnie w przypadku wartoci brutto, ktra jest obliczana przez dodanie do wartoci netto stawki podatku VAT, naley skorzysta z modyfikatorw Smarty.
Modyfikator zmiennej  1  pozwala na okrelenie formatu wywietlania
wartoci, ktrej dotyczy. W powyszym przypadku nakazujemy wywietlanie wartoci
zmienno-pozycyjnych z dokadnoci do dwch miejsc po przecinku (po zaokrgleniu).
W sekcji przedstawiajcej zawarto koszyka stworzona jest ptla 1 , ktra wykonuje iteracje po tablicy produktw z koszyka. Tablica zwracana jest przez metod
 obiektu koszyka.

-   ).  &' 3


Nazwa produktu znajdujcego si w koszyku jest jednoczenie czem do strony prezentacyjnej produktu. W szablonie TPL zostaa zdefiniowana nastpujco:
,I=$18$% *8*
17*I0

4 -"5$).&'3
-"5$)).!&'3

Jako cze, ktre tworzy zmienn typu 8! o nazwie 



zawierajc identyfikator
obiektu produktu, jest wywietlana nazwa obiektu asortymentu powizanego z produktem.
Nastpnie definiowana jest lista rozwijana, z ktrej mona wybra liczb sztuk danego
produktu:

,I.
$ 18 3$ $1$8  $39$ 162
1*% *I0
 6.
.  & 7#-"5$).&'3#'

- .8 9:;8   ).<9=;&'3
-  > 9:;?@  59 9:;?@3
8
- ; >)@3

- ; >)@ "@$3 -3


- ; >)@3

- 3
 


Do wygenerowanie listy rozwijanej zawierajcej liczb sztuk, ktre mona wybra,


zosta wykorzystany element  . Maksymalna liczba sztuk, ktra zostanie wygenerowana na licie, jest uzyskiwana przez metod  9  '( obiektu  :.
Jak wida element  (element formularza HTML) zawiera atrybut , ktry
powoduje, e po zmianie elementu wywietlanego na licie rozwijanej wywoywana
jest funkcja JavaScript o nazwie . Sama funkcja wyglda nastpujco:

 %
,  $0
J *3$ 1% 17 $39$% 
 7 *$3 1$8$  E *
17*$

186

PHP i MySQL. Tworzenie sklepw internetowych


  -$ )$
*
@%  +,
   $ - ( KLML66NMLLOPPKOQLOMR%  
(S%  S(R$(S
$/
0


,  $0

 %

Funkcja   jzyka szablonw Smarty powoduje, e kod, ktry znajduje si midzy
znacznikami , . oraz ,; ., jest nie jest interpretowany w trakcie kompilacji szablonu. Gdybymy nie uyli tego elementu, kompilacja nie przebiegaby pomylnie,
poniewa klamrowy nawias , otwierajcy ciao funkcji  zostaby zinterpretowany jako rozpoczcie funkcji Smarty.
Pozostay fragment kodu szablonu TPL jest odpowiedzialny za wygenerowanie informacji o cenach produktu. Jeeli produkt jest objty promocj, naley wywietli ceny,
tak jak zostao to pokazane na rysunku 8.3.
Rysunek 8.3.
Wywietlanie ceny detalicznej
produktu znajdujcego si w koszyku.
Produkt jest objty promocj

Aby sprawdzi, czy produkt jest objty promocj, naley skorzysta z metody 

"*+ '( obiektu klasy 
. Metoda ta zwraca warto #<!, jeeli
produkt jest objty promocj, oraz "&+! w przeciwnym razie. Poniewa obiekty produktw dodane do koszyka s, podobnie jak cay koszyk, przechowywane w zmiennej
sesyjnej, podczas wywoania metody 
"*+  podajemy jako argument
warto #<!. Dziki temu na obiekcie klasy 
 zostaje wymuszone odwieenie
informacji o promocjach (informacje te s wtedy pobierane bezporednio z bazy danych uaktualniana jest warto waciwoci +  obiektu klasy 
).
Wicej o metodach obiektu klasy 
 mona przeczyta w rozdziale Kategorie
i produkty.
,I& $1$
1*2I0
-"5$) *A8&,BC'3

Jeeli produkt jest objty promocj, wywietlamy najpierw ceny detaliczne. Wykorzystujemy tutaj metody obiektu klasy 
, takie jak:   '( i +
   '(, aby wywietli ceny netto, oraz    '( i + 
   '(, aby wywietli ceny brutto:
,I& 7%  73 $ 1 I0
,I& $  % *61%  3 % 1* E $+I0
-"5$).*!&'3
,I& $%  73 $  % * $1 8 +I0
-"5$).*!&'3

Rozdzia 8. Koszyk

187

,I& $6  % *61%  3 % 1* E $+I0


-"5$).* &'/ .0
12
3
I& $%  73 $6  % * $1 8 +I0
-"5$).* &'/ .0
12
3

Jeeli produkt nie jest objty promocj, wywietlane ceny s uzyskiwane tylko przez
metody   '(oraz    '((rysunek 8.4):
Rysunek 8.4.
Wywietlanie ceny detalicznej
produktu znajdujcego si w koszyku.
Produkt nie jest objty promocj
,
0
,I& 761%  3 I0
,I& $  % *I0
-"5$).*!&'3
,I& $6  % *I0
-"5$).* &'/ .0
12
3

Nastpnie w koszyku jest wywietlana czna warto cenowa produktu, ktra zaley
od liczby sztuk danego produktu w koszyku:
,I. 16$
1*% *I0
-"@$3

Jeeli produkt jest objty promocj, ceny powinny by wywietlane tak, jak zostao to
pokazane na rysunku 8.5.
Rysunek 8.5.
Wywietlanie cznej wartoci
cenowej produktu w koszyku,
produkt jest objty promocj
-"5$) *A8&'3

Jak wida, tym razem metoda 


"*+ '( obiektu klasy 
 nie
posiada adnego argumentu. Nie trzeba odwiea informacji o promocji, poniewa
zostao to zrobione wczeniej w tym samym szablonie TPL.
Aby wywietli warto sumaryczn liczby sztuk danego produktu w koszyku, korzystamy ze znanych nam ju metod klasy 
 oraz z funkcji  szablonw Smarty:
,IT91 $8$  EH% *8%  3 I0
,ID$  EH  8
17
* -
1*% *61%  3 % 1* E $+I0
-:
9D;
9 "5$).*!&'; "@$
12
3
,I& $  8
17
* -
1*% *8%  3  $1 8 +I0
-:
9D;
9 "5$).*!&'; "@$
12
3
,I& $6  8
17
* -
1*% *61%  3 % 1* E $+I0
-:
9D;
9 "5$).* &'; "@$
12
3

188

PHP i MySQL. Tworzenie sklepw internetowych


,I& $6  8
17
* -
1*% *8%  3  $1 8 +I0
-:
9D;
9 "5$).* &'; "@$
12
3

Funkcja  pozwala wyliczy dowolne wyraenie matematyczne, a take sformatowa


jego wynik. W powyszym przypadku wykonujemy dziaanie = (atrybut   ),
gdzie warto  to odpowiednia cena, a warto  liczba sztuk danego produktu w koszyku. Cao jest formatowana tak, aby wynik by zaokrglony z dokadnoci do dwch
miejsc po przecinku.
Jeeli produkt nie jest objty promocj, wywietlane jest jego podstawowa cena (rysunek 8.6).
Rysunek 8.6.
Wywietlanie cznej wartoci
cenowej produktu w koszyku.
Produkt nie jest objty promocj
,
0
,I& 7% *61%  3 I0
,I& $  8
17
* -
1*% *I0
-:
9D;
9 "5$).*!&'; "@$
12
3
,I& $6  8
17
* -
1*% *I0
-:
9D;
9 "5$).* &'; "@$
12
3
-3
-3

W ten oto sposb w szablonie TPL wywietlana jest zawarto koszyka. Kompletny
plik szablonu basket.tpl mona znale w pliku sklepinternetowy/www/templates/public/
basket.tpl.

You might also like