Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00663 010430 16905193 na godz. na dobę w sumie
Flash i PHP. Tworzenie systemu e-commerce - książka
Flash i PHP. Tworzenie systemu e-commerce - książka
Autor: Liczba stron: 272
Wydawca: Helion Język publikacji: polski
ISBN: 83-246-1740-X Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> biznes it >> e-biznes
Porównaj ceny (książka, ebook, audiobook).

Połącz znane technologie i stwórz absolutnie wyjątkową witrynę e-commerce!

Tworzenie statycznych lub naszpikowanych migającymi obrazkami stron internetowych jest już dzisiaj passé. Nikt nie lubi ani nudnych stron, tworzonych w HTML-u, ani rozpraszających, ruchomych obrazków, powtarzających się w nieskończoność. Dobrze zaprojektowana, funkcjonalna i estetyczna witryna musi być to taka która jest przejrzysta i interaktywna. Powinna także działać szybko i niezawodnie, a wyniki wyszukiwania czy innej aktywności użytkownika prezentować w atrakcyjnej i zrozumiałej formie. Taki efekt może zapewnić połączenie kilku znanych technologii - HTML-a, Flasha oraz PHP. Pozwala ono tworzyć zupełnie wyjątkowe aplikacje internetowe: z kodem wykonywanym po stronie serwera, z doskonałą strukturą i fantastyczną nawigacją, zapewniającą internautom pełny komfort poruszania się po serwisie.

Książka 'Flash i PHP. Tworzenie systemu e-commerce' zawiera kompletny opis tworzenia takiej doskonałej witryny, łączącej w sobie elementy różnych języków i technik programowania. Jej autor krok po kroku przeprowadzi Cię przez cały proces projektowy, od momentu powstania pomysłu na e-biznes, do chwili ukończenia programowania. Pokaże Ci, jak działają różne systemy e-commerce, jakie są dostępne rozwiązania i jakie wzorce projektowe można wykorzystać. Wyjaśni, co to jest streaming, pomoże zbudować interfejs, bazę danych i katalog produktów, będzie Ci także towarzyszyć podczas procesu instalacji i obsługi strony. Z jego pomocą poradzisz sobie z najtrudniejszymi zadaniami - tym bardziej, że na starcie oczekuje on od Ciebie jedynie podstawowej wiedzy o wykorzystywanych językach programowania.

Stwórz estetyczny i komfortowy sklep internetowy!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Flash i PHP. Tworzenie systemu e-commerce Autor: £ukasz Piecuch ISBN: 83-246-1740-X Format: 158×235, stron: 272 Po³¹cz znane technologie i stwórz absolutnie wyj¹tkow¹ witrynê e-commerce! (cid:127) Jak przygotowaæ œrodowisko pracy i wykorzystaæ mo¿liwoœci Flasha oraz PHP? (cid:129) Jak po³¹czyæ z sob¹ elementy ró¿nych technologii, s³u¿¹cych do budowy aplikacji internetowych? (cid:129) Jak stworzyæ funkcjonalny i atrakcyjny system typu e-commerce? Tworzenie statycznych lub naszpikowanych migaj¹cymi obrazkami stron internetowych jest ju¿ dzisiaj passé. Nikt nie lubi ani nudnych stron, tworzonych w HTML-u, ani rozpraszaj¹cych, ruchomych obrazków, powtarzaj¹cych siê w nieskoñczonoœæ. Dobrze zaprojektowana, funkcjonalna i estetyczna witryna musi byæ to taka która jest przejrzysta i interaktywna. Powinna tak¿e dzia³aæ szybko i niezawodnie, a wyniki wyszukiwania czy innej aktywnoœci u¿ytkownika prezentowaæ w atrakcyjnej i zrozumia³ej formie. Taki efekt mo¿e zapewniæ po³¹czenie kilku znanych technologii – HTML-a, Flasha oraz PHP. Pozwala ono tworzyæ zupe³nie wyj¹tkowe aplikacje internetowe: z kodem wykonywanym po stronie serwera, z doskona³¹ struktur¹ i fantastyczn¹ nawigacj¹, zapewniaj¹c¹ internautom pe³ny komfort poruszania siê po serwisie. Ksi¹¿ka „Flash i PHP. Tworzenie systemu e-commerce” zawiera kompletny opis tworzenia takiej doskona³ej witryny, ³¹cz¹cej w sobie elementy ró¿nych jêzyków i technik programowania. Jej autor krok po kroku przeprowadzi Ciê przez ca³y proces projektowy, od momentu powstania pomys³u na e-biznes, do chwili ukoñczenia programowania. Poka¿e Ci, jak dzia³aj¹ ró¿ne systemy e-commerce, jakie s¹ dostêpne rozwi¹zania i jakie wzorce projektowe mo¿na wykorzystaæ. Wyjaœni, co to jest streaming, pomo¿e zbudowaæ interfejs, bazê danych i katalog produktów, bêdzie Ci tak¿e towarzyszyæ podczas procesu instalacji i obs³ugi strony. Z jego pomoc¹ poradzisz sobie z najtrudniejszymi zadaniami – tym bardziej, ¿e na starcie oczekuje on od Ciebie jedynie podstawowej wiedzy o wykorzystywanych jêzykach programowania. (cid:129) Systemy e-commerce – dostêpne rozwi¹zania, Flash, PHP, MySQL (cid:129) œrodowisko pracy – Apache, PHP i MySQL, Adobe Flash CS4 Professional, Adobe Photoshop CS4 (cid:129) Flash – ³adowanie zmiennych z zewn¹trz, techniki po³¹czenia, streaming audio i video (cid:129) Wzorzec projektowy MVC i za³o¿enia projektu (cid:129) Przygotowanie do pracy bazy danych i Frameworka (cid:129) Programowanie Front-end (cid:129) Tworzenie interfejsu we Flashu i panelu administracyjnego (cid:129) Instalacja i obs³uga systemu Stwórz estetyczny i komfortowy sklep internetowy! Spis treĈci O autorze ......................................................................................... 5 Wstöp .............................................................................................. 7 Rozdziaä 1. Systemy e-commerce ..................................................................... 11 Co decyduje o popularnoĞci systemów e-commerce ...................................................... 11 DostĊpne rozwiązania ..................................................................................................... 12 Dlaczego Flash? .............................................................................................................. 13 Dlaczego PHP? ............................................................................................................... 14 Dlaczego MySQL? ......................................................................................................... 14 Rozdziaä 2. Przygotowujemy Ĉrodowisko pracy .................................................. 15 Instalujemy Apache, PHP i MySQL ............................................................................... 15 Konfiguracja .......................................................................................................... 17 Wybieramy edytor kodu ................................................................................................. 27 Instalujemy Adobe Flash CS4 Professional .................................................................... 29 Przygotowujemy program do pracy ....................................................................... 33 Instalujemy Adobe Photoshop CS4 ................................................................................ 34 Przygotowujemy program do pracy ....................................................................... 36 Rozdziaä 3. Jak Flash äñczy siö ze Ĉwiatem ....................................................... 39 àadowanie zmiennych z zewnątrz .................................................................................. 39 Query String, czyli zmienne w adresie .................................................................. 39 àadowanie zmiennych zapytania HTTP ................................................................ 43 Zmienne w pliku tekstowym .................................................................................. 47 DostĊpne techniki poáączenia ......................................................................................... 52 Poáączenia Flash – Flash ........................................................................................ 52 Poáączenia Flash – JavaScript ................................................................................ 56 Poáączenia Flash – PHP – MySQL ........................................................................ 59 ZagnieĪdĪanie zewnĊtrznych obrazów we Flashu ................................................. 64 ZagnieĪdĪanie zewnĊtrznych plików swf we Flashu ............................................. 74 Flash i XML ........................................................................................................... 75 Streaming ....................................................................................................................... 88 Streaming audio ..................................................................................................... 88 Streaming wideo .................................................................................................... 91 4 Flash i PHP. Tworzenie systemu e-commerce Rozdziaä 4. Projekt .......................................................................................... 97 Wzorzec projektowy MVC ............................................................................................. 97 Budowa frameworka .............................................................................................. 98 Dziaáanie frameworka .......................................................................................... 100 Funkcje frameworka ............................................................................................ 107 ZaáoĪenia projektu ........................................................................................................ 110 Ogólne zaáoĪenia ................................................................................................. 110 Projekt bazy danych ............................................................................................. 111 Projekt kontrolerów, modeli oraz widoków ......................................................... 114 BezpieczeĔstwo ................................................................................................... 118 Projekt interfejsu .................................................................................................. 119 Rozdziaä 5. Tworzenie systemu ....................................................................... 125 Przygotowanie bazy danych ......................................................................................... 125 Wypeánienie przykáadowymi danymi .................................................................. 128 Przygotowanie frameworka do pracy ........................................................................... 129 Konfiguracja poáączenia z bazą danych ............................................................... 129 Programujemy front-end ............................................................................................... 130 Katalog produktów .............................................................................................. 130 Koszyk ................................................................................................................. 140 Skáadanie zamówieĔ ............................................................................................ 145 Tworzymy interfejs we Flashu ..................................................................................... 150 Katalog produktów .............................................................................................. 174 Koszyk ................................................................................................................. 194 Skáadanie zamówieĔ ............................................................................................ 202 Ostatnie szlify ...................................................................................................... 210 Tworzymy panel administracyjny ................................................................................ 215 Tworzymy menu panelu administracyjnego ........................................................ 218 Obsáuga asortymentu ........................................................................................... 218 Obsáuga zamówieĔ ............................................................................................... 250 Rozdziaä 6. Instalacja i obsäuga ...................................................................... 259 Skorowidz .................................................................................... 263 Rozdziaä 4. Projekt W poprzednich rozdziaáach przyjrzeliĞmy siĊ programistycznym aspektom áączenia róĪnych technologii z ActionScript. Nadszedá czas na wykorzystanie tej wiedzy w praktyce. W kolejnych rozdziaáach postaramy siĊ wykorzystaü zdobytą wiedzĊ przy tworzeniu prostego, lecz w peáni funkcjonalnego sklepu internetowego, czyli systemu e-commerce. Naturalnie przed przystąpieniem do programowania musimy caáoĞü zapro- jektowaü i omówiü. Faza projektowania jest pierwszą kluczową fazą w tworzeniu jakie- gokolwiek oprogramowania, dlatego teĪ warto poĞwiĊciü kilka chwil, chwyciü dáugo- pis w dáoĔ i wypisaü zaáoĪenia systemu oraz rozrysowaü szczegóáowo budowĊ. Przed przystąpieniem do projektowania systemu warto przeczytaü omówienie przygotowa- nego przeze mnie do tego celu frameworka. Jest to szkielet kontrolera MVC, czyli Model-View-Controller, oparty na jĊzyku PHP. Pozwoli on nam na stworzenie logicznej, hierarchicznej organizacji oprogramowania. Kolejnym krokiem bĊdzie omówienie moduáów, z jakich skáadaá siĊ bĊdzie system. W tym kroku zdecydujemy, jakie zadanie bĊdzie realizowaá PHP, a jakie ActionScript. NastĊpnie zaprojektujemy bazĊ danych, która bĊdzie przechowywaü dla nas informacje o produktach i zamówieniach. JeĞli o niczym nie zapomniaáem, to pod koniec tego rozdziaáu powinieneĞ mieü w gáowie klarowny obraz tego, w jaki sposób program bĊdzie zbudowany i jak bĊdzie funkcjo- nowaá. WytáumaczĊ teĪ zaleĪnoĞci pomiĊdzy poszczególnymi funkcjami i moduáami systemu. Zatem do dzieáa. Wzorzec projektowy MVC Czym jest wzorzec projektowy? MoĪna powiedzieü, Īe są to pewne uniwersalne, wypra- cowane przez „pokolenia”, sprawdzone w praktyce rozwiązania problemów projekto- wych. Nie moĪna powiedzieü, Īe są to konkretne funkcjonalne rozwiązania jakichĞ zadaĔ czy problemów, lecz raczej jest to podwalina i szkielet, na którym takowe bĊdą siĊ opieraü. Jak donosi moja ulubiona encyklopedia (Wiki oczywiĞcie), wzorzec MVC (ang. Model-View-Controller — Model-Widok-Kontroler) to „architektoniczny” wzo- rzec projektowy w informatyce, którego gáównym zaáoĪeniem jest wyodrĊbnienie trzech podstawowych komponentów aplikacji: 98 Flash i PHP. Tworzenie systemu e-commerce  modelu danych,  interfejsu uĪytkownika,  logiki sterowania1. Definicja moĪe nie mówi Ci wiele, ale juĪ spieszĊ z wyjaĞnieniami. Wzorzec MVC sta- nowi niejako szkielet tworzonych aplikacji. Wyznacza logikĊ organizacji kodu. Zmusza programistów do czytelnej organizacji moduáów oprogramowania. Oddziela od siebie interfejs uĪytkownika, logikĊ sterowania oraz dane. RozwaĪmy to na prozaicznym przykáadzie sklepu. UĪytkownik koĔcowy wybiera produkt, operując w warstwie inter- fejsu. Przyciskając przyciski, wywoáuje funkcje kontrolera, czyli logiki sterowania. Kontroler decyduje, jakie operacje na danych przeprowadziü w zaleĪnoĞci od dziaáaĔ uĪytkownika. NastĊpnie przekazuje zlecenia wykonania operacji na danych do odpowied- niego modelu. Ten zwraca nieobrobiony wynik swoich operacji. Kontroler opraco- wuje wyniki dziaáaĔ modelu i decyduje o kolejnym kroku, czyli np. wyĞwietla kolejną stronĊ bądĨ odpowiedni komunikat. Tak w skrócie wygląda sposób dziaáania wzorca MVC. Na podstawie wzorców MVC powstaáo i wciąĪ powstaje wiele frameworków, czyli szkieletów wyposaĪonych w biblioteki i rozwiązania uáatwiające i przyĞpiesza- jące programowanie. Przykáadem niech bĊdą: CakePHP, Zend Framework czy Sym- fony. MoĪna na ten temat dyskutowaü, jednak nie jestem fanem korzystania z ogól- nodostĊpnych rozwiązaĔ i o wiele bardziej ceniĊ sobie te wáasne, opracowane w pocie czoáa, ulepszane przy tworzeniu kolejnych projektów. Dlatego wáaĞnie specjalnie na potrzeby naszego projektu przygotowaáem prosty framework, na którym bĊdziemy tworzyü nasz system. Na początek przyjrzymy siĊ jego budowie. NastĊpnie przeĞle- dzimy sposób dziaáania oraz poznamy jego funkcje. Budowa frameworka Framework zbudowany jest z dwóch zasadniczych czĊĞci: jądra oraz samej aplikacji. Jądro frameworka znajduje siĊ w katalogu core i jest niezmienne, chyba Īe wprowadzamy niezbĊdne poprawki i unowoczeĞnienia. Sama zaĞ aplikacji znajduje siĊ w katalogu app.  Katalog core:  addons — przechowuje wszelkie dodatki, biblioteki;  classes — przechowuje kluczowe dla dziaáania frameworka klasy, konstruktory i funkcje;  includes — zawiera plik startup.php.  Katalog app:  controllers — kontrolery aplikacji;  models — modele aplikacji;  wiews — interfejs aplikacji;  webroot — skrypty js, grafika, style css, pliki Flash. 1 http://pl.wikipedia.org/wiki/MVC Rozdziaä 4. i Projekt 99 Istotny jest równieĪ plik index.php, który zawiera podstawową konfiguracjĊ — usta- wienia dostĊpu do bazy danych. Jądro frameworka moĪna z powodzeniem rozszerzaü o nowe funkcje poprzez jego edycjĊ bądĨ dodawanie nowych klas do katalogu addons. Natomiast wszelkie pliki programu bĊdziemy umieszczaü w katalogu app. Pliki zawie- rające logikĊ aplikacji znajdą siĊ zatem w katalogu controllers, a klasy modeli realizu- jące dostĊp do danych — w katalogu models. Pliki interfejsu, czyli dokumenty HTML (lecz zapisywane z rozszerzeniem php) zapisywaü bĊdziemy w katalogu views. Warto przyjrzeü siĊ temu katalogowi bliĪej, gdyĪ zostaá on podzielony na kilka logicznych czĊĞci:  elements,  layouts,  pages,  texts. W katalogu elements umieszczaü bĊdziemy maáe, czĊsto wystĊpujące i powtarzające siĊ w witrynie elementy typu koszyk, menu, boksy z newsami itp. Jest to doskonaáe miejsce na przechowywanie elementów áadowanych przez Ajax. Katalog layouts zawiera natomiast szablony witryny, czyli jej powtarzalny szkielet — szablon. Szablonem takim bĊdzie dokument HTML z nagáówkami, stopką, staáymi ele- mentami typu menu. W katalogu pages umieszczaü bĊdziemy poszczególne strony witryny. Jako Īe front-end naszej aplikacji wykonany bĊdzie w technologii Flash, katalog ten posáuĪy nam gáównie do przechowywania stron panelu administracyjnego. Katalog texts przechowuje pliki ze specyficznymi tekstami, gáównie komunikatów witryny. KaĪda wersja jĊzykowa witryny posiada osobny plik z listą komunikatów. Zatem gdy uĪytkownik zmieni jĊzyk witryny, system zaáaduje odpowiedni plik z táu- maczeniem i witryna zacznie komunikowaü siĊ z nim w rodzimym jĊzyku. JeĞli juĪ jesteĞmy przy wersjach jĊzykowych witryny, muszĊ nadmieniü, iĪ komuni- katy jĊzykowe to tylko maáy procent tekstów znajdujących siĊ w witrynie. Dlatego teĪ w kaĪdym katalogu z views znajduje siĊ osobny folder oznaczony skrótem jĊzykowym w postaci „pl”, „eng”, „de” itp. Dlatego po zmianie jĊzyka witryny system wczyta ade- kwatne elementy, szablony oraz strony. Zobaczmy jeszcze, co kryje siĊ w folderze webroot:  css,  files,  img,  js,  upload,  xml. 100 Flash i PHP. Tworzenie systemu e-commerce Przeznaczenie poszczególnych katalogów mówi samo za siebie. Jedynie znaczenie katalogu upload moĪe nie byü do koĔca jasne. SáuĪy on do przechowywania wszelkiej zawartoĞci przesyáanej przez uĪytkowników, np. obrazków do newsów áadowanych przez redaktorów, avatarów rejestrujących siĊ uĪytkowników itp. Dziaäanie frameworka Po uruchomieniu witryny wczytywany jest plik index.php. Jednak warto nadmieniü, iĪ przed nim ma miejsce interpretacja pliku .htaccess, w którym to zawarto procedurĊ niezbĊdną do realizacji zamysáu „przyjaznych linków”. OtóĪ wszystkie uĪywane w sys- temie linki są w postaci: adreswitryny.com/kontroller/akcja/parametry w odróĪnieniu od paskudnych adreswitryny.com?controller=xxx action=yyy arg1=zzz arg2=qqq. Jak juĪ wczeĞniej wspomniaáem, w pliku index.php znajduje siĊ kilka linii kodu odpo- wiedzialnych za konfiguracjĊ dostĊpu do baz danych: $dsn = array( phptype = mysql , username = , password = , hostspec = localhost , database = , ); Przed uruchomieniem frameworka naleĪy te dane bezwzglĊdnie ustawiü. Zmienna username oznacza nazwĊ uĪytkownika, password — hasáo do bazy danych, hostspec — adres serwera baz danych, database — nazwĊ bazy. Jest to praktycznie jedyne usta- wienie niezbĊdne do dziaáania frameworka. Opcjonalnymi ustawieniami jest ustawienie domyĞlnego jĊzyka witryny oraz adresów e-mail systemu oraz administracji. Adres e-mail systemu to adres, który bĊdzie pojawiaá siĊ w polu nadawcy w e-mailach wysyáanych przez system, natomiast adres administracji to adres, na który system wysyáa e-maile związane z dziaáaniem, np. dane backupu. W pliku index.php tworzone są kolejno instancje niezbĊdnych klas: Registry, Session, Database, Template, Router. Gdy w wywoáaniu podamy nazwĊ kontrolera, router go dla nas zaáaduje, jeĞli nie — zaáaduje domyĞlną klasĊ kontrolera home. Router znajdzie teĪ dla nas zadeklarowane w kontrolerze modele i je zaáaduje, to samo dotyczy dodat- ków addons. JeĞli wywoáanie zawiera nazwĊ akcji kontrolera, zostanie ona znaleziona i wywoáana, jeĞli nie — router wykona funkcjĊ index kontrolera. Przed kaĪdą akcją zawsze i bezwzglĊdnie wywoáywana jest funkcja BeforeFilter. Jest to doskonaáe miej- sce do umieszczenia procedur sprawdzających poprawnoĞü logowania w kontrolerze administracji czy teĪ prozaicznego ustawiania tytuáu strony. Procedury zawarte w tej funkcji wykonywane są przed kaĪdą wywoáywaną akcją, dlatego gdy istnieje koniecz- noĞü wywoáywania pewnych partii kodu przy kaĪdej z nich, jest to najlepsze miejsce. W funkcji kontrolera uĪyjemy modeli oraz zaáadujemy odpowiednie widoki, ale o tym za chwilĊ. Zróbmy maáe üwiczenie. WyĞwietlmy typowe Hello World i rozpocznijmy naszą przy- godĊ z tym jakĪe prostym i uáatwiającym Īycie frameworkiem. Skopiuj katalog z frame- workiem do swojego katalogu serwera, czyli htdocs, jeĞli uĪywasz xampp. Rozdziaä 4. i Projekt 101 Czysty framework znajduje siö na doäñczonej päycie CD, w katalogu Framework. Otwórz katalog app/controllers, a nastĊpnie otwórz plik home.php. Jak widzisz, w pierw- szych dwóch liniach deklarujemy nazwĊ bądĨ nazwy uĪywanych w kontrolerze modeli oraz nazwĊ szablonu, z jakiego korzystają domyĞlnie strony wyĞwietlane przez kon- troler (moĪna to zmieniaü dla poszczególnych akcji w wywoáaniu strony: $this- tem ´plate- show( home/index , nazwa_szablonu );. ZaáóĪmy, Īe chcemy wysáaü do interfejsu zmienną z tekstem Hello World. Aby to zrobiü, skorzystamy z metody set klasy template. Dodajmy zatem do funkcji index liniĊ: $this- template- set( zmienna , Hello world ); Kod ten naleĪy dodaü przed wywoáaniem strony — jest to logiczne, gdyĪ jaki sens miaáoby wysyáanie do szablonu zmiennych po jego wyĞwietleniu. Funkcja bĊdzie wyglądaü nastĊpująco: function index($args=null,$post=null){ $this- template- set( zmienna , Hello world ); $this- template- show( home/index , index ); } Kolejnym krokiem jest wyĞwietlenie zmiennej w widoku. Przechodzimy zatem do katalogu views/pages/pl/home i otwieramy plik index.php. Wpiszmy w nim nastĊpu- jący kod: Tutaj pojawi siú zmienna ustawiona w kontrolerze: br / ?php echo $zmienna; ? Po uruchomieniu programu naszym oczom powinien ukazaü siĊ powyĪszy tekst oraz ustawiona przez nas zmienna. Aby sprawdziü dziaáanie systemu, w przeglądarce naleĪy wpisaü adres serwera oraz nazwĊ katalogu, w którym znajduje siĊ framework, np.: http://localhost/test1. PowinieneĞ zobaczyü napis: Tutaj pojawi siĊ zmienna ustawiona w kontrolerze: Hello World Kiedy otworzysz Ĩródáo, zauwaĪysz, Īe poza wpisaną przez Ciebie treĞcią w pliku views/pages/pl/home/index.php znajduje siĊ równieĪ reszta struktury dokumentu HTML. Jest to zawartoĞü pliku views/layouts/pl/index.php. Struktura Ĩródáa zostaáa przedsta- wiona na rysunku 4.1. Warto zauwaĪyü, iĪ akcja index kontrolera home wywoáywana jest jako domyĞlna. MoĪemy ją równieĪ wywoáaü rĊcznie, wpisując w polu adresu przeglądarki: http:// localhost/test1/home/index. Utwórzmy teraz kolejną akcjĊ kontrolera. Pod deklaracją funkcji index w pliku home.php utwórzmy kolejną funkcjĊ o nazwie np. proba: function proba($args=null,$post=null){ } 102 Flash i PHP. Tworzenie systemu e-commerce Rysunek 4.1. Struktura dokumentu HTML wygenerowanego przez framework Nic nie stoi na przeszkodzie, abyĞmy uĪyli tego samego widoku. Jednak przeüwiczymy teraz áadowanie obrazków oraz skorzystamy z funkcji modelu. Utwórz wiĊc w kata- logu views/pages/pl/home plik o nazwie proba.php. BĊdzie to nasz plik HTML dla akcji proba kontrolera home. Zadeklaruj w funkcji akcji nasz plik widoku: function proba($args=null,$post=null){ $this- template- show( home/proba , index ); } Otwórz plik proba.php i umieĞü w nim dowolną zawartoĞü. Aby wyĞwietliü na stronie obrazek, wystarczy takowy skopiowaü do katalogu webroot/img/home/, a w kodzie strony HTML umieĞciü: img src= img/home/1.jpg alt= / System sam odnajdzie odpowiednią ĞcieĪkĊ do obrazka. AkcjĊ wywoáamy, wpisując http://localhost/test1/home/proba w przeglądarce. Korzystamy z modelu Wspominaáem wczeĞniej o tym, iĪ model sáuĪy do operacji odczytu i zapisu danych. Tworząc róĪnego rodzaju aplikacje, staram siĊ przeprowadzaü w modelu operacje moĪliwie niskiego poziomu, lecz o kluczowym znaczeniu, a kontrolerowi pozostawiaü rolĊ decyzyjną w oparciu o dane wynikowe dostarczone przez model. W modelach bĊdziemy zatem pobieraü dane z baz danych oraz je zapisywaü. BĊdziemy kopiowaü pliki i przeprowadzaü na nich operacje typu kompresja i skalowanie. Otwórzmy zatem plik models/home.php. Znajduje siĊ w nim tylko konstruktor i dwie funkcje odpowiedzialne za zmianĊ jĊzyka witryny. Utwórzmy wiĊc wáasną funkcjĊ, która zwróci do kontrolera pewne dane, tak abyĞmy mieli pogląd na sposób dziaáania modelu. Przyjmijmy, Īe nazwiemy ją Get_users: Rozdziaä 4. i Projekt 103 function get_users(){ } W funkcji utwórzmy tablicĊ z fikcyjnymi imionami uĪytkowników: function get_users(){ $users = array( Marek , Agnieszka , Karolina , Đucja , Franek ); return $users; } To wszystko, jeĞli chodzi o model. Wywoáanie naszej funkcji w kontrolerze bĊdzie wyglądaü nastĊpująco: $users = $this- model- home- get_users(); Pozostaje nam jeszcze przesáaü zdobyte dane do widoku: $this- template- set( uzytkownicy ,$users); Zatem akcja proba bĊdzie wyglądaü w tej chwili nastĊpująco: function proba($args=null,$post=null){ $users = $this- model- home- get_users(); $this- template- set( uzytkownicy ,$users); $this- template- show( home/proba , index ); } Wywoáanie strony w przeglądarce niewiele zmieni, gdyĪ przesáaną zmienną uzytkownicy trzeba jeszcze wykorzystaü w pliku HTML widoku. Zrobimy to na przykáad tak: ?php if($uzytkownicy){ $i=0; foreach($uzytkownicy as $user){ $i++; echo b .$i. . /b .$user. br / ; } } ? Kod pozwoli na wyĞwietlenie listy uĪytkowników wraz z numerem porządkowym. Zrealizowaną akcjĊ moĪemy teraz wyĞwietliü w przeglądarce, wpisując: http://localhost/ test1/home/proba. W zaleĪnoĞci od tego, co wpisaáeĞ w kodzie widoku, Twoja strona moĪe wyglądaü mniej wiĊcej tak, jak na rysunku 4.2. Gotowy program znajdziesz na päycie CD pod nazwñ test1 w katalogu Framework_ cwiczenia. 104 Rysunek 4.2. Wynik dziaáania aplikacji Flash i PHP. Tworzenie systemu e-commerce Tworzenie nowego kontrolera, modelu i widoku Nic nie stoi na przeszkodzie, aby utworzyü nowe kontrolery, które bĊdą odpowiedzialne za róĪne moduáy realizowanego projektu. Taka budowa oprogramowania pozwala w prosty sposób adaptowaü pewne moduáy i rozwiązania w innych projektach. Równie dobrze moĪemy tworzyü caákiem nowe modele i wykorzystywaü je zamiennie w kon- trolerach. KaĪdy kontroler moĪe korzystaü z róĪnych modeli. PrzeprowadĨmy zatem üwiczenie, w którym utworzysz, Drogi Czytelniku, kontroler, model i odpowiednie pliki widoków. Aby utworzyü nowy kontroler, naleĪy: 1. W katalogu app/controllers/ utworzyü plik nazwa_kontrolera.php — pamiĊtając, aby w miejsce nazwa_kontrolera wpisaü wymyĞloną przez siebie nazwĊ, poprzez którą bĊdziemy odwoáywaü siĊ do metod kontrolera. Nie naleĪy uĪywaü polskich znaków, spacji oraz duĪych liter. 2. Otworzyü utworzony plik kontrolera i umieĞciü w nim nastĊpujący kod: ?php $models=array( home ); $layout= index ; Class Controller_Nazwa_Kontrolera Extends Controller_Base { function index($args=null,$post=null){ } //////////////////////////////////////////////////////////////////////// function BeforeFilter($action){ $this- template- set( action ,$action); $this- template- set( lang , $_SESSION[ languageID ]); $this- template- set( pageTitle , Tytuđ strony ); } function deadend($args=null,$post=null){ Rozdziaä 4. i Projekt 105 $this- template- show( home/deadend , index ); } } ? W tablicy $models deklarujemy wszystkie modele, z których chcemy korzystaü, zaĞ zmienna $layout sáuĪy do okreĞlenia domyĞlnego szablonu wczytywanego przy wyĞwie- tlaniu stron HTML. NaleĪy zwróciü uwagĊ na liniĊ Class Controller_Nazwa_Kontrolera Extends Controller_Base, gdyĪ naleĪy w niej wpisaü nazwĊ kontrolera w postaci Controller_PrzykladowyKontroler. To wszystko. Nowy kontroler jest utworzony i gotów do pracy. Wystarczy tylko wypeániü go funkcjami, czyli tak zwanymi akcjami kontrolera. DąĪąc do utworzenia nowego modelu, przygotujmy odpowiednio plik kontrolera. Dosko- nale wiesz, jak to zrobiü. Wystarczy w zmiennej $models dodaü nazwĊ utworzonego modelu. OczywiĞcie kontroler moĪe równolegle korzystaü z wielu modeli. WyobraĨ sobie taką sytuacjĊ: tworzysz oprogramowanie do obsáugi firmy hostingowej. Takie oprogramowanie musi zawieraü kilka kluczowych moduáów. Jednym z nich bĊdzie moduá do zarządzania klientami, drugim moduáem bĊdzie obsáuga pakietów hostin- gowych, trzecim moduáem moĪe byü helpdesk, czyli czaty do komunikacji z pomocą techniczną. KaĪdy z tych moduáów powinien posiadaü oddzielny plik modelu w celu zachowania logiki dziaáania, moduáowoĞci, uáatwienia obsáugi i zachowania pewnej kultury programowania. Zatem utworzymy w takim wypadku modele o nazwach clients, products i helpdesk. W modelu clients znajdą siĊ wszystkie funkcje odpowie- dzialne za tworzenie nowych klientów, skáadanie przez nich zamówieĔ na produkty z moduáu products, obsáugĊ páatnoĞci (gdyby ten moduá byá rozbudowany i w grĊ wchodziáaby obsáuga kilku czy kilkunastu róĪnych kanaáów páatnoĞci, nic nie stoi na przeszkodzie, aby posiadaá wáasny model), bilingowanie. W modelu products znajdą siĊ funkcje odpowiedzialne za zarządzanie produktami, czyli pakietami hostingowymi. Model helpdesk bĊdzie odpowiedzialny za przeprowadzanie komunikacji pomiĊdzy uĪytkownikiem a pracownikiem obsáugi za pomocą czatów wykonanych w dowolnej technologii (czemu by nie Flash?) czy teĪ internal messagingu. Zmodyfikujmy zatem odpowiednio nowo stworzony kontroler o nazwie shopping (bĊdzie odpowiedzialny za wyĞwietlanie produktów i dokonywanie zakupu), tak aby przysto- sowaü go do korzystania z trzech modeli: home, products, clients. Zapewne bĊdzie to dla Ciebie pikuĞ, ale gwoli ĞcisáoĞci poniĪej znajdziesz peány kod kontrolera (listing 4.1). Listing 4.1. Kod kontrolera products ?php $models=array( home , products , clients ); $layout= index ; Class Controller_Shopping Extends Controller_Base { function index($args=null,$post=null){ } ///////////////////////////////////////////////////////// 106 Flash i PHP. Tworzenie systemu e-commerce function BeforeFilter($action){ $this- template- set( action ,$action); $this- template- set( lang , $_SESSION[ languageID ]); $this- template- set( pageTitle , Tytuđ strony ); } function deadend($args=null,$post=null){ $this- template- show( home/deadend , index ); } } ? Po zapisaniu zmian spróbuj uruchomiü w przeglądarce system, wywoáując kontroler shopping. PowinieneĞ zobaczyü nastĊpujący komunikat o báĊdzie: 404 — Model File Not Found Oznacza to, iĪ nasze modele jeszcze nie istnieją. Musimy je wiĊc utworzyü. Aby utworzyü nowy model, naleĪy: 1. W katalogu app/model/ utworzyü plik o nazwie modelu, np. products.php. 2. Otworzyü plik i umieĞciü w nim kod: ?php Class Model_Products{ function __construct($registry) { $this- registry = $registry; $this- db=$registry- db; $this- error=$registry- error; $this- text=$registry- text; $this- addon=$registry- addon; } } ? Tak jak i w wypadku kontrolera naleĪy zwróciü uwagĊ na liniĊ: Class Model_Pro ´ducts — naleĪy w niej podaü odpowiednią nazwĊ modelu, w naszym wypadku bĊdzie to Products. Dla ĞcisáoĞci podam kod modelu clients (listing 4.2). Listing 4.2. Kod modelu clients ?php Class Model_Clients{ function __construct($registry) { $this- registry = $registry; $this- db=$registry- db; $this- error=$registry- error; Rozdziaä 4. i Projekt 107 $this- text=$registry- text; $this- addon=$registry- addon; } } ? Po utworzeniu tych dwóch plików moĪna odĞwieĪyü stronĊ kontrolera w przeglądarce. Okazuje siĊ, iĪ báąd znika. OczywiĞcie nic siĊ nie pojawia, gdyĪ nie umieĞciliĞmy w funkcji index Īadnego kodu. Pozostaje nam jeszcze przeüwiczyü tworzenie widoków. Aby utworzyü nowy widok, naleĪy: 1. W katalogu: app/views/pages/WYBRANY_JĉZYK/NAZWA_KONTROLERA/ utworzyü plik php o dowolnej nazwie, nie zapominając o zakazie uĪywania polskich znaków diakrytycznych oraz spacji. Jako Īe chcemy utworzyü nowy widok dla funkcji index kontrolera shopping w jĊzyku polskim, wejdĨmy do katalogu app/views/pages/pl/ i utwórzmy folder o nazwie shopping. W katalogu shopping utwórzmy nowy plik o nazwie index.php, zaĞ w jego zawartoĞci wpiszmy dowolny kod HTML. Aby uĪyü nowo utworzonego widoku, w kodzie akcji index kontrolera shopping naleĪy umieĞciü znany Ci juĪ kod: $this- template- show ´( shopping/index );. Zatem funkcja index bĊdzie wyglądaü nastĊpująco: function index($args=null,$post=null){ $this- template- show( shopping/index ); } Proste? Nie! Banalne. Mam nadziejĊ, iĪ tych kilka prostych üwiczeĔ wprowadziáo CiĊ w arkana tworzenia oprogramowania przy uĪyciu struktur MVC. Jako Īe zapropono- wany przeze mnie kontroler MVC posiada kilka funkcji uáatwiających pracĊ z wido- kami, bazami danych czy pluginami, w kolejnym rozdziale przedstawiĊ te funkcje, lecz bez szczegóáowego zagáĊbiania siĊ w sposoby ich wykorzystywania. BĊdzie to swego rodzaju Ğciągawka, z której bĊdziesz mógá korzystaü przy tworzeniu naszego sklepu. Zapewne nie uĪyjemy wszystkich funkcji frameworka, dlatego moĪe stanowiü on dla Ciebie doskonaáy szkielet, który moĪesz dowolnie rozbudowywaü i wykorzystywaü we wáasnych projektach. W mojej Agencji Interaktywnej — Blazing Bright stosujemy opracowany przez nas framework, który pracuje wedáug dokáadnie tych samych zasad i jest zbudowany wedáug tego samego wzorca. UĪycie go w dziesiątkach projektów potwierdza skutecznoĞü rozwiązania. Funkcje frameworka W poniĪszym rozdziale zapoznasz siĊ z funkcjami dostĊpnymi we frameworku. Są wĞród nich procedury odczytywania i zapisu danych w bazie danych, funkcje odpowie- dzialne za zarządzanie widokami czy teĪ wczytujące dodatki. 108 Flash i PHP. Tworzenie systemu e-commerce Metody template $this- template- set( nazwazmiennej , wartoħèzmiennej); Przesyáa do widoku zmienną. UĪywane w kontrolerze. nazwazmiennej: String; wartoħèzmiennej: String, Integer, Array; $this- template- show( sciezka/do/pliku/widoku , plik_layoutu ); WyĞwietla widok przy uĪyciu wskazanego layoutu. JeĞli layout nie zostaá zdefinio- wany, uĪyty zostanie layout defaultowy zadeklarowany w kontrolerze. UĪywane w kontrolerze. sciezka/do/pliku/widoku: String — ĞcieĪka do pliku widoku [php], bez rozszerzenia; plik_layoutu: String — ĞcieĪka do pliku layoutu [php], bez rozszerzenia. $this- template- popup( typ , $affected, immediate); WyĞwietla komunikat odpowiedniego typu o zadanej treĞci. MoĪe byü wyĞwietlony od razu bądĨ po przeáadowaniu strony. UĪywany w kontrolerze admin. typ: String [‘error’,’success’,’prompt’] — typ komunikatu. $affected: String, Array — zawartoĞü komunikatu. immediate: Boolean [true,false] — okreĞla, czy komunikat wyĞwietla siĊ od razu, czy po przeáadowaniu strony. $this- template- element( sciezka/do/elementu , zmienne); Zwraca sparsowany element HTML. UĪywany w kontrolerze — przesyáany do widoku np. jako efekt wywoáaĔ Ajax bądĨ uĪywany w widoku do wczytywania elementów strony, np. menu. sciezka/do/elementu: String — ĞcieĪka do pliku elementu [php], bez rozszerzenia; zmienne: Array — tablica zmiennych przesyáanych do elementu. $this- template- url( url ); Metoda uĪywana w widoku do generowania linków prowadzących do akcji kontrolerów. Wszystkie linki w systemie powinny byü tworzone za pomocą tej metody. url: String — ĞcieĪka do akcji kontrolera zbudowana z nazwy kontrolera oraz nazwy akcji w postaci: nazwa_kontrolera/akcja. W parametrach moĪna przesyáaü wartoĞci zmiennych GET w postaci: nazwa_kontrolera/akcja/ zmienna1/zmienna2/zmienna3. Zmienne odczytujemy w kontrolerze: $args[0] (‘zmienna1’) , $args[1] (‘zmienna2’) itd. Rozdziaä 4. i Projekt Metody db 109 $this- db- query( zapytanie SQL ); Wykonuje zapytanie SQL. UĪywane w modelu. $this- db- query_and_fetchrow( zapytanie SQL ); Zwraca jeden wiersz wynikowy zapytania SQL. UĪywane w modelu. $this- db- query_and_fetchall( zapytanie SQL ); Zwraca wszystkie wiersze wynikowe zapytania SQL. UĪywane w modelu. $this- db- insert( zapytanie SQL , $types, $data); Zapisuje wiersz w bazie danych. UĪywane w modelu. Zapytanie SQL: String — zapytanie SQL w postaci: UPDATE gallery SET title=:title, description=:description WHERE id=:id, gdzie :nazwazmiennej. $types: Array — tablica zawierająca listĊ przyporządkowującą zmiennym do zapisu w bazie konkretny typ danych String bądĨ Integer. Przykáad: $types = array( title = str , description = str , id = int ); $data: Array — tablica danych do zapisu. $this- db- check_values($data, $types); Sprawdza, czy dane $data są odpowiedniego typu $types. Zwraca tabelĊ z nazwami zmiennych i wychwyconymi báĊdami walidacji: 1 — jeĞli zmienna jest pusta, 0 — jeĞli zmienna jest záego typu. UĪywane w modelu. $data:Array — tabela danych. $types:Array — tabela typów danych w postaci: nazwa zmiennej = typ zmiennej . MoĪe przyjąü nastĊpujące typy zmiennych: str, int, email. Przykáad: $this- db- check_values(array( title = Tytuđ newsa , email = xyz@aaa ), array( title = str , email = email )); PowyĪszy przykáad zwróci báąd dla zmiennej e-mail, gdyĪ nie jest ona poprawnym adre- sem poczty e-mail. Zwrócona tablica bĊdzie wyglądaáa nastĊpująco: array( email = 0);. $this- db- is_unique($table, $fields); Sprawdza unikalnoĞü wystąpieĔ wartoĞci w tabeli. Zwraca true, jeĞli wartoĞü jest uni- kalna, bądĨ false, jeĞli wartoĞü juĪ wystĊpuje w tabeli. UĪywane w modelu. 110 Flash i PHP. Tworzenie systemu e-commerce $table: String — nazwa tabeli. $fields: Array — lista sprawdzanych wartoĞci w postaci pole = wartoħè . Metody routera $this- router- redirect( url ); SáuĪy do przekierowywania na akcje kontrolera. UĪywane w kontrolerze. url: String — ĞcieĪka do akcji kontrolera zbudowana z nazwy kontrolera oraz nazwy akcji w postaci: nazwa_kontrolera/akcja. W parametrach moĪna przesyáaü wartoĞci zmiennych GET w postaci: nazwa_kontrolera/akcja/ zmienna1/zmienna2/zmienna3. Metody addons Aby zadeklarowaü dodatki uĪywane w kontrolerze, naleĪy je zadeklarowaü w sekcji, w której deklarujemy równieĪ modele: $models=array( home , products , clients ); $addons = array( token , hmac_md5 ); $this- addon- nazwa_klasy_dodatku- funkcja_dodatku(parametry); SáuĪy do wywoáania funkcji dodatku deklarowanych w pliku core/addons/nazwa_ dodatku.php. UĪywane w kontrolerze. ZaäoĔenia projektu Naszym celem jest utworzenie funkcjonującego sklepu internetowego wraz z panelem administracyjnym. System skáadaá siĊ bĊdzie z niezbĊdnych moduáów, takich jak katalog produktów, koszyk, formularz zamówienia, moduá zarządzania produktami czy moduá zarządzania zamówieniami. Są to elementy niezbĊdne do dziaáania sklepu, jednak sta- nowią minimum i w ramach üwiczeĔ polecam Ci, Drogi Czytelniku, rozbudowaü system o dodatkowe moduáy, takie jak panel klienta wraz z listą zamówieĔ i statusem zamó- wienia czy formularze kontraktowe bądĨ czat ze sprzedawcami. Taki sklep bĊdzie swo- istym RIA, czyli Rich Internet Application. Sam sklep, czyli front-end, wykonamy we Flashu, natomiast panel administracyjny bĊdzie wykonany w HTML. RozwaĪmy zatem ogólne zaáoĪenia projektu. Ogólne zaäoĔenia Sklep 1. Wykonany w aplikacji Flash. 2. Katalog produktów wyĞwietlający produkty z podziaáem na kategorie. Rozdziaä 4. i Projekt 111 3. Indywidualna strona produktu z galerią zdjĊü, opisem oraz ceną. 4. Koszyk zamówieĔ z moĪliwoĞcią dodawania oraz usuwania produktów. 5. Formularz zamówienia do wprowadzania danych i finalizacja zamówienia. Panel administracyjny 1. Moduá zarządzania produktami z moĪliwoĞcią dodawania i usuwania produktów oraz edycją produktów i ich kategorii. 2. Przegląd zamówieĔ z moĪliwoĞcią zmiany ich statusu. Projekt bazy danych Nie pozostaje nam nic innego jak przystąpienie do prac projektowych. Zacznijmy od bazy danych. Zakáadając, iĪ przechowywaü w niej bĊdziemy informacje o produktach oraz zamówieniach, na pewno skáadaü siĊ bĊdzie z dwóch tabel. Po gáĊbszym zasta- nowieniu moĪna przyjąü, iĪ jedna tabela, o nazwie products, przechowywaü bĊdzie takie informacje jak: niepowtarzalny identyfikator produktu, jego nazwa, opis, cena oraz iloĞü dostĊpnych sztuk. ZaáoĪyliĞmy jednak, iĪ kaĪdy produkt przyporządkowany bĊdzie do pewnej kategorii produktów, dlatego bĊdziemy musieli zapisaü równieĪ identyfi- kator kategorii, który odnosiá siĊ bĊdzie do tabeli kategorii. Zatem tabela przechowująca informacje o produktach prezentowaü bĊdzie siĊ nastĊpująco (rysunek 4.3): Rysunek 4.3. Tabela products Wspominaáem o tabeli kategorii. Zastanówmy siĊ zatem, jak powinna ona wyglądaü. Na pewno bĊdzie posiadaü unikalny identyfikator, który uĪywany jest w tabeli pro- duktów. Powinna teĪ posiadaü pole nazwy. Nie bĊdziemy zgáĊbiaü zagadnienia zagnieĪ- dĪania kategorii, jednak podpowiem, iĪ moĪna to rozwiązaü, dodając pole parent, które przechowywaü bĊdzie id nadrzĊdnej kategorii. NastĊpnie budowanie drzewka kategorii wymagaü bĊdzie zastosowania rekurencyjnych wywoáaĔ. Na szczĊĞcie ActionScript obsáuguje rekurencjĊ, wiĊc w ramach üwiczeĔ po ukoĔczeniu programu proponujĊ Ci modyfikacjĊ kodu, tak aby obsáugiwaá podkategorie. Tabela categories bĊdzie wiĊc wyglądaü nastĊpująco (rysunek 4.4): Rysunek 4.4. Tabela categories Relacje pomiĊdzy tabelami prezentowaü bĊdą siĊ nastĊpująco (rysunek 4.5): 112 Rysunek 4.5. Relacje pomiĊdzy tabelami products i categories Flash i PHP. Tworzenie systemu e-commerce Pozostaje nam jeszcze rozwaĪyü budowĊ tabeli przechowującej zamówienia. W takiej tabeli na pewno trzeba bĊdzie zapisaü dane klienta, datĊ zamówienia, sposób páatnoĞci (udostĊpnimy wyáącznie páatnoĞü przy odbiorze bądĨ przelew bankowy) oraz listĊ zamówionych produktów wraz z iloĞcią. W jednym polu nie zapiszemy listy produktów (chyba Īe oddzielimy je przecinkiem, ale to Ğmieszne rozwiązanie). Dlatego teĪ bĊdziemy musieli utworzyü dwie tabele — jedna przechowywaü bĊdzie informacje o kliencie oraz szczegóáach zamówienia bez listy zamówionych produktów, natomiast w drugiej zapisywaü bĊdziemy zamawiane produkty wraz z aktualną ceną jednostkową, iloĞcią oraz identyfikatorem zamówienia, tak aby jednoznacznie przyporządkowaü je do kon- kretnego zamówienia. Tabela zamówieĔ wyglądaü bĊdzie jak na rysunku 4.6. Rysunek 4.6. Tabela orders Natomiast tabela z listą zamówionych produktów wyglądaü bĊdzie jak na rysunku 4.7. Rysunek 4.7. Tabela orders_products Relacje pomiĊdzy tymi dwoma tabelami bĊdą prezentowaü siĊ nastĊpująco (rysunek 4.8): Rysunek 4.8. Relacje pomiĊdzy tabelami orders i orders_products àatwo siĊ domyĞliü, do czego sáuĪy pole product_name w tabeli orders_products. Prze- chowywaü bĊdzie ono nazwy produktów. Nie bĊdziemy kojarzyü tabeli orders_products Rozdziaä 4. i Projekt 113 z tabelą products, aby uniknąü niebezpieczeĔstwa utraty integralnoĞci w wypadku usu- niĊcia produktu z bazy. Nie bĊdziemy równieĪ stosowaü osobnych tabel do przecho- wywania usuniĊtych produktów na potrzeby zamówieĔ, aczkolwiek takie rozwiązanie byáoby bardziej prawidáowe. Diagram relacji tabel moĪesz zobaczyü na rysunku 4.9. Rysunek 4.9. Relacje wszystkich tabel Są to wszystkie tabele, jakich bĊdziemy potrzebowaü do obsáugi sklepu. JednakĪe biorąc pod uwagĊ fakt, iĪ bĊdziemy równieĪ budowaü panel administracyjny, na rysunku zamieszczono teĪ tabele admins, admins_permissions oraz tabelĊ, w której framework zapisuje dostĊpne wersje jĊzykowe: conf_languages. Musimy gdzieĞ przechowywaü login i hasáo administratorów. Dlatego teĪ tworzymy tabelĊ skáadającą siĊ z identyfi- katora, loginu, odcisku palca stworzonego na podstawie hasáa, czyli hasha md5, oraz nazwy administratora (rysunek 4.10). Rysunek 4.10. Tabela admins Tworzymy teĪ tabelĊ, która przechowa sygnatury dostĊpnych wersji jĊzykowych (rysunek 4.11). Mimo Īe tworzymy stronĊ tylko w jednej wersji, to system potrzebuje tej tabeli do poprawnego dziaáania, nawet jeĞli bĊdzie w niej tylko jeden wpis. Rysunek 4.11. Tabela conf_languages Trzecia tabela, admins_permissions, zawiera informacje okreĞlające, do edycji których wersji jĊzykowych mają dostĊp poszczególni administratorzy (rysunek 4.12). Rysunek 4.12. Tabela admins_permissions Na koniec rzuü okiem na wygląd naszej bazy danych (rysunek 4.13). 114 Rysunek 4.13. Wszystkie tabele projektu Flash i PHP. Tworzenie systemu e-commerce Projekt kontrolerów, modeli oraz widoków PójdĨmy zatem o krok dalej. Zastanówmy siĊ, jakie usáugi bĊdziemy Ğwiadczyü uĪyt- kownikowi, jakich operacji na danych bĊdziemy dokonywaü. Postarajmy siĊ zaprojek- towaü hierarchiĊ kontrolerów oraz modeli. JeĞli chodzi o widoki, bĊdą to raczej poszcze- gólne pliki swf, gdyĪ na nich wáaĞnie bĊdzie opieraá siĊ nasz interfejs, przynajmniej ten front-endowy. Podstawową usáugą bĊdzie katalog produktów z podziaáem na kate- gorie. BĊdziemy zatem potrzebowaü kontrolera o nazwie catalog. Przyjmijmy, iĪ podstawową akcją kontrolera catalog bĊdzie index. Po jej uruchomieniu naszym oczom powinna ukazaü siĊ lista kategorii oraz kilka losowo wybranych produktów (nie wybraliĞmy przecieĪ jeszcze Īadnej kategorii). Zatem funkcja index powinna mieü moĪliwoĞü wczytywania listy kategorii oraz kilku losowych produktów. Po wybraniu dowolnej kategorii uĪytkownik powinien zobaczyü listĊ produktów. PowinniĞmy zatem przygotowaü funkcjĊ o nazwie category, która w swych parametrach przyjmowaü bĊdzie identyfikator kategorii i zwróci listĊ produktów w niej zawartych. Po klikniĊciu wybra- nego produktu powinien wyĞwietliü siĊ kompletny opis produktu, jednak jak zoba- czysz póĨniej, obejdzie siĊ przy tym bez kolejnych zapytaĔ do bazy danych. Zatem reasumując, kontroler catalog powinien wyglądaü nastĊpująco: Kontroler Catalog  index — nie przyjmuje parametrów, wyĞwietla stronĊ gáówną sklepu;  categories — zwraca listĊ kategorii;  randomProducts — zwraca kilka losowo wybranych produktów;  category — jako parametr przyjmuje identyfikator kategorii, zwraca listĊ produktów z danej kategorii. Model o tej samej nazwie powinien posiadaü nastĊpujące funkcje: Model Catalog  get_all_categories — wczytuje listĊ wszystkich kategorii;  get_random_products — wczytuje listĊ kilku przykáadowych produktów;  get_products_by_category — wczytuje produkty z danej kategorii. Podstawową opcją katalogu bĊdzie dodawanie produktów do koszyka, dlatego teĪ musimy utworzyü kontroler odpowiedzialny za jego obsáugĊ. Nazwijmy go shop. Oprócz koszyka kontroler ten bĊdzie obsáugiwaá proces skáadania zamówienia. Kontroler powi- Rozdziaä 4. i Projekt 115 nien mieü moĪliwoĞü wyĞwietlenia zawartoĞci koszyka, dodawania, jak teĪ i usuwania produktów, obsáugi formularza zamówienia oraz przesyáania zamówienia do realizacji. Przyjmijmy, iĪ kontroler bĊdzie skáadaá siĊ z nastĊpujących funkcji: Kontroler Shop  cartContent — zwraca zawartoĞü koszyka;  addToCart — dodaje okreĞloną liczbĊ sztuk produktu do koszyka;  removeFromCart — usuwa okreĞlony przedmiot z koszyka;  clearCart — usuwa z koszyka wszystkie produkty;  sendOrder — wysyáa zamówienie, czyli zapisuje je w bazie danych. Zastanówmy siĊ, gdzie bĊdziemy przechowywaü informacje związane z zawartoĞcią koszyka. ProponujĊ uĪyü do tego sesji. BĊdziemy w nich zapisywaü, jakie produkty oraz w jakiej iloĞci zostaáy do koszyka dodane. Zapis oraz odczyt sesji bĊdzie realizowany w funkcjach modelu shop. Postarajmy siĊ okreĞliü, jakie funkcje bĊdą nam potrzebne: Model Shop  get_cart_content — odczytuje zapisaną w sesji zawartoĞü koszyka;  add_to_cart — zapisuje do sesji kolejno dodawane do koszyka produkty;  remove_from_cart — usuwa z sesji informacje o produkcie;  clear_cart — usuwa dane sesji koszyka;  save_checkout_data — zapisuje w bazie danych szczegóáy zamówienia. Powinny to byü wszystkie funkcje, jakich bĊdziemy potrzebowaü do obsáugi front-endu sklepu. Teraz trzeba siĊ zastanowiü, co bĊdzie niezbĊdne do obsáugi sklepu przez admi- nistracjĊ. Zakáadamy, iĪ bĊdziemy mieli moĪliwoĞü wyĞwietlania listy produktów w sprzedaĪy, ich dodawania, edycji oraz usuwania. Musimy teĪ udostĊpniü funkcje obsáugi katego- rii. Oraz oczywiĞcie najistotniejszą czĊĞü panelu administracji, czyli przegląd zamó- wieĔ. Potrzebna bĊdzie lista zamówieĔ z moĪliwoĞcią wyĞwietlania danych klienta oraz zmiany statusu zamówienia. Utworzymy zatem kontroler o nazwie admin, nato- miast do operacji na danych uĪyjemy modeli catalog oraz shop. Jakie funkcje utwo- rzymy w kontrolerze admin? Kontroler admin  login — realizacja logowania;  logout — wylogowanie;  settings — zmiana hasáa dostĊpu;  products — wyĞwietlanie listy produktów;  products_add — dodawanie nowego produktu; 116 Flash i PHP. Tworzenie systemu e-commerce  products_edit — edycja produktu;  products_remove — usuwanie produktu;  products_categories — zarządzanie kategoriami;  products_categories_add_new — dodawanie nowej kategorii produktów;  products_categories_edit — edycja kategorii;  products_categories_remove — usuwanie kategorii;  orders — zarządzanie zamówieniami;  orders_change_status — zmiana statusu zamówienia;  orders_remove — usuwanie zamówienia. Utworzymy równieĪ model admin, który bĊdzie realizowaá wyáącznie funkcje związane z logowaniem oraz zmianą hasáa. Model admin  login — funkcja realizująca logowanie;  change_password — funkcja realizująca zmianĊ hasáa. Jak juĪ wspomniaáem wczeĞniej, do operacji na danych uĪyjemy wczeĞniej utworzonych modeli catalog oraz shop. Dodamy do nich odpowiednie funkcje, które bĊdą odpo- wiadaü za zapisywanie do bazy danych nowych produktów czy kategorii. Model catalog  ADMIN_get_all_products — wczytuje wszystkie produkty;  ADMIN_save_new_product — zapisuje nowy produkt w bazie danych;  ADMIN_edit_product — wczytuje dane produktu do edycji;  ADMIN_update_product — zapisuje zmienione dane produktu do bazy danych;  ADMIN_remove_product — usuwa produkt;  ADMIN_upload_image — obsáuguje wgrywanie zdjĊü produktów;  ADMIN_save_new_category — zapisuje nową kategoriĊ;  ADMIN_update_category — zapisuje zmienioną kategoriĊ;  ADMIN_remove_category — usuwa kategoriĊ. Model shop  ADMIN_get_all_orders — wczytuje wszystkie zamówienia;  ADMIN_change_order_status — zmienia status zamówienia oraz powiadamia o tym klienta poprzez wysáanie e-maila;  ADMIN_remove_order — usuwa zamówienie. Rozdziaä 4. i Projekt 117 OkreĞliliĞmy zatem kluczowe dla dziaáania systemu funkcje. Stanowią one niejako szkielet i są niezbĊdne do sprawnego dziaáania caáoĞci. OczywiĞcie nie jesteĞmy w stanie przewidzieü wszystkich moĪliwoĞci i scenariuszy — jest to umiejĊtnoĞü budowana na doĞwiadczeniu. Jednak jak doskonale wiesz, chociaĪby na przykáadzie gigantów w zakresie oprogramowania, doĞwiadczenie nie zawsze idzie w parze z umiejĊtno- Ğciami przewidywania, co uĪytkownik jest w stanie zrobiü z programem oraz jakie báĊdy mogą wystąpiü. Dlatego teĪ sporządzony przez nas projekt naleĪy traktowaü ela- stycznie i sukcesywnie modyfikowaü go w procesie deweloperskim, co teĪ bĊdziemy czyniü. W kwestii widoków nasza sytuacja jest nieco inna niĪ w wypadku tworzenia systemu wyáącznie w HTML. Do obsáugi interfejsu front-endu bĊdziemy uĪywaü aplikacji Flash. Zakáadamy, iĪ bĊdzie miaá on budowĊ moduáową i skáadaá siĊ bĊdzie z co naj- mniej czterech moduáów — jednego do wyĞwietlania katalogu produktów, drugiego do wyĞwietlania szczegóáów produktu, trzeciego do obsáugi koszyka oraz czwartego do obsáugi formularzy zamówienia. Dobrze bĊdzie teĪ zbudowaü program nadrzĊdny, czyli ten, który áaduje siĊ jako pierwszy. BĊdzie on stanowiá swoisty layout dla reszty moduáów. Widoki interfejsu — front-end  Layout — kontener  Moduá katalogu  Moduá szczegóáów produktu  Moduá koszyka  Moduá skáadania zamówienia Jako Īe Flash nie potrzebuje do dziaáania przeáadowaĔ stron, nie bĊdziemy musieli tworzyü dziesiątek pojedynczych stron HTML. Zgoáa inaczej wyglądaü to bĊdzie w panelu administracyjnym. Tam gáówną rolĊ odgry- waü bĊdzie HTML. Dlatego bĊdziemy tworzyü strony z tabelami produktów, formularze do dodawania oraz edycji produktów oraz kategorii itp. Z góry moĪemy przewidzieü, iĪ stworzymy kilka podstron: Widoki interfejsu panelu administracyjnego  login — strona logowania,  index — strona powitalna panelu,  logout — strona poĪegnalna panelu,  settings — strona zmiany hasáa,  orders — strona z listą zamówieĔ,  products — strona z listą produktów,  add_product — formularz dodawania nowego produktu, 118 Flash i PHP. Tworzenie systemu e-commerce  edit_product — formularz edycji produktu,  categories — strona z listą kategorii (na niej bĊdzie przeprowadzane równieĪ dodawanie, edycja i usuwanie kategorii. To wszystko, jeĞli chodzi o szczegóáy budowy szkieletu systemu. Mamy juĪ poglądowy obraz tego, jak bĊdzie wyglądaáo i funkcjonowaáo to oprogramowanie. Bezpieczeþstwo JuĪ w fazie projektu warto zwróciü uwagĊ na bezpieczeĔstwo tworzonego oprogramo- wania. Obowiązkiem programisty jest przewidzieü i odpowiednio zabezpieczyü opro- gramowanie przed skutkami niepoĪądanych dziaáaĔ i wypadków. W przypadku two- rzenia sklepu internetowego, gdzie w bazie danych przechowywane są dane osobowe jego klientów, naleĪy zachowaü naleĪytą starannoĞü i za gáówny cel przyjąü ochronĊ tych danych. Dlatego teĪ bardzo istotną kwestią jest dostĊp do baz danych. Mimo Īe gáówna konfiguracja serwera baz danych leĪy po stronie administracji serwera, to juĪ na poziomie uĪytkownika domeny jesteĞmy w stanie powziąü pewne kroki zmierzające ku lepszemu zabezpieczeniu danych naszych klientów. Dlatego bardzo istotne jest, aby zwróciü uwagĊ na takie prozaiczne ustawienia PHP, jak register_globals. DziĊki niemu wszystkie zmienne przesyáane do skryptu tworzone są jako globalne, co w przy- padku nienaleĪytej starannoĞci przy tworzeniu skryptów umoĪliwi crackerom wyko- nywanie ataków typu SQLInjection, czyli manipulacjĊ zapytaniami SQL, oszukiwa- nie systemów logowania do panelu administracyjnego itp. Dlatego bardzo istotne jest, aby parametr ten ustawiony byá na 0. Uczynimy to chociaĪby w pliku konfiguracyjnym serwera httpd.conf: php_admin_value register_globals 0 BądĨ teĪ w pliku .htaccess: php_flag register_globals 0 Drugą kwestią jest filtrowanie wszystkich danych wprowadzanych przez uĪytkowni- ka. Nie moĪna zakáadaü, iĪ uĪytkownik wprowadzi do formularzy oczekiwane przez nas dane. Zresztą formularze najczĊĞciej poddawane są walidacji, natomiast nie moĪna spodziewaü siĊ oczekiwanych wartoĞci w zmiennych, które z reguáy powinny byü gene- rowane przez system, chociaĪby parametrów przesyáanych w adresie metodą GET. Stare greckie porzekadáo mówi, Īe gdy spodziewasz siĊ w parametrze otrzymaü identyfikator w postaci liczbowej, najpewniej otrzymasz 256 losowych znaków w cyrylicy (oczy- wiĞcie Īart, lecz prawdziwy). Dlatego istotne jest przeprowadzanie filtracji wszyst- kiego, co wychodzi od uĪytkownika, oraz wszystkiego, na co teoretycznie nie powinien mieü wpáywu. PamiĊtaj wiĊc o uĪywaniu funkcji: htmlspecialchars bądĨ strip_tags, trim do usuwania znaków niedrukowalnych, addslashes, mysql_real_escape_string. Oprogramowanie powinno byü „idiotoodporne”, dlatego warto przeprowadzaü nie- zbĊdne testy przy pomocy zaprzyjaĨnionych internautów :-). Testy takie pozwolą wykryü wiĊcej luk, niĪ mógábyĞ sobie wyobraziü, dlatego są tak istotnym punktem procesu deweloperskiego. Rozdziaä 4. i Projekt 119 JeĞli chodzi o bezpieczeĔstwo skryptów ActionScript, to jesteĞmy o tyle w komforto- wej sytuacji, iĪ nasze skrypty uruchamiane są w obrĊbie jednej domeny, dlatego nie musimy przejmowaü siĊ dyrektywami Security.allowDomain(). Jednak i w tym wypadku warto przewidzieü niepoĪądane zachowania uĪytkownika, takie jak wielokrotne kli- kanie linków z uporem maniaka. Bardzo wartoĞciową lekturą traktującą o zabezpie- czeniach w programie Flash Player jest rozdziaá manuala wydanego przez Adobe, znaj- dujący siĊ pod adresem: http://help.adobe.com/pl_PL/ActionScript/3.0_Programming AS3/ WS5b3ccc516d4fbf351e63e3d118a9b90204-7d23.html. Projekt interfejsu Gdy juĪ ogarniemy wszystkie aspekty związane z oprogramowaniem, skupimy siĊ na projekcie graficznym naszego sklepu. Jest to istotne, gdyĪ pierwsze wraĪenie, jakie odnosi uĪytkownik wchodzący na witrynĊ, zaleĪy wáaĞnie od jej wyglądu. JeĞli witryna bĊdzie wyglądaü nieciekawie, a do tego bĊdzie nieczytelna i trudna w obsáudze, to szybko „pozbĊdziemy siĊ” potencjalnego klienta. Dlatego witrynĊ naleĪy projektowaü wedle ustalonych i obowiązujących standardów, jednak nie sztampowo i nudnie. NaleĪy kierowaü siĊ zasadami ergonomii i zachowywaü moĪliwie najwyĪszą prostotĊ. Wszelkie niepotrzebne udziwnienia są niepoĪądane, natomiast ciekawe animacje i drobne akcenty — jednak w rozsądnej iloĞci — są mile widziane. Jako Īe zajmujemy siĊ wyáącz- nie witryną sklepu, bĊdziemy staraü siĊ zagospodarowaü w projekcie miejsce na przed- stawienie odwiedzającym tego, co mamy do zaoferowania. Musi znaleĨü siĊ tam miejsce na listĊ kategorii produktów, na listĊ samych produktów oraz ich opis. Uruchamiamy zatem Photoshop lub inny program graficzny i tworzymy projekt. JeĞli nie masz ochoty czy teĪ artystycznej Īyáki, na doáączonej páycie CD, w katalogu Projekt_graficzny znajdziesz przygotowane pliki. PoniĪej prezentujĊ kilka stron, których bĊdziemy potrzebowali. Pierwszą z nich bĊdzie strona katalogu produktów, czyli listy produktów losowych (o ile jesteĞmy na stronie gáównej sklepu) bądĨ z wybranej kategorii. Istotna jest równieĪ paginacja. Nieergonomiczne wydaje siĊ tu byü stosowanie suwaków (rysunek 4.14). U góry przewidziane jest miejsce na menu witryny, jeĞli oprócz sklepu przewidujemy jakieĞ inne podstrony. BĊdzie to teĪ dobre miejsce na umieszczenie linków do dziaáu kontakt bądĨ informacji o sklepie. Mój projekt przewiduje, iĪ strona bĊdzie dostosowywaü siĊ do rozmiaru ekranu, lecz bez skalowania jej elementów. Skalowane do rozmiaru przeglądarki bĊdzie jedynie táo. Obrączki w prawym dolnym rogu bĊdą páynnie prze- mieszczaü siĊ w razie skalowania okna przeglądarki, tak aby zawsze znajdowaü siĊ w ĞciĞle okreĞlonym miejscu w rogu ekranu. Reszta elementów bĊdzie zawsze statycznie umiejscowiona. Po lewej stronie przewidziano miejsce na listĊ kategorii sklepu. Po wybraniu kategorii wczyta siĊ lista produktów, a na górze prostokąta obejmującego treĞü ukaĪe siĊ nazwa kategorii. Pod kaĪdym skróconym opisem produktu znajduje siĊ przycisk dodawania do koszyka oraz pole input do wprowadzenia liczby kupowa- nych sztuk towaru. Kolejną podstroną jest strona ze szczegóáowym opisem wybranego produktu. Pojawi siĊ ona po klikniĊciu linku „szczegóáy” znajdującego siĊ przy kaĪ- dym produkcie. Projekt zobaczysz na rysunku 4.15.
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Flash i PHP. Tworzenie systemu e-commerce
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: