Professional Documents
Culture Documents
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
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
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 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
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
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.
180
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.
do koszyka;
limit sztuk jednego produktu w koszyku (warto domylnie
,
,
, .
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.
. 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
$
899
7*$ 6*% *
#4AB>(% (?++,
!""
!"#
#$)*&+,"##$'++,
5% $3$$
$% **
17*$
%8C$
2
Rozdzia 8. Koszyk
181
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).
182
Mechanizm promocji zosta omwiony w rozdziale Kategorie i produkty w podrozdziale Produkty w promocji.
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 $
"
Rozdzia 8. Koszyk
183
(rodzaj dostawy) identyfikator pola sownikowego )
*. Sownik
)
* zawiera informacje o tym, w jaki sposb zawarto zamwienia
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
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
Po zoeniu zamwienia koszyk jest czyszczony, a uytkownik moe ponownie przystpi do zakupw.
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
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
186
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
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% 3I0
,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
188
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.