Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00211 006458 13237119 na godz. na dobę w sumie
PHP. Praktyczne projekty - książka
PHP. Praktyczne projekty - książka
Autor: Liczba stron: 552
Wydawca: Helion Język publikacji: polski
ISBN: 83-246-0943-1 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Wykorzystaj w praktyce potęgę możliwości PHP!

Język PHP nie od dziś stanowi jeden z najłatwiejszych w nauce i najelastyczniejszych języków programowania. Jego ogromne możliwości wykorzystywane są na ogół przy tworzeniu interaktywnych stron internetowych, a obiektowy charakter oraz modułowość stanowią atuty dla programistów, wreszcie zwolnionych z konieczności ustawicznego przepisywania tego samego kodu. Jak każdego innego języka, także i PHP najłatwiej nauczyć się na konkretnych, praktycznych przykładach -- wiele z nich zamieszczono właśnie w tej książce.

'PHP. Praktyczne projekty ' to naprawdę wyjątkowy podręcznik do nauki PHP. Nie spodziewaj się tu suchych, typowo podręcznikowych teorii! Znajdziesz w nim za to omówienie wszystkich elementów języka PHP, działania skryptów, funkcji i bibliotek wraz z dowcipnymi i przejrzystymi przykładami ich użycia. Pierwsza część książki wprowadzi Cię w świat PHP oraz wyjaśni, jak stosować i łączyć poszczególne polecenia w dobrze działający kod. Z następnych rozdziałów wyniesiesz już umiejętności czysto praktyczne, dotyczące wszystkich obszarów wykorzystania tego języka przy tworzeniu najróżniejszych projektów.

Przekonaj się, że PHP można nauczyć się nie tylko szybko, ale i przyjemnie!

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

Darmowy fragment publikacji:

PHP. Praktyczne projekty Autor: W³odzimierz Gajda ISBN: 978-83-246-0943-7 Format: 158×235, stron: 552 Wykorzystaj w praktyce potêgê mo¿liwoœci PHP! (cid:129) Podstawy jêzyka PHP, pierwsze skrypty, instrukcje i elementy (cid:129) Funkcje i ich biblioteki, przetwarzanie tablic i tworzenie plików (cid:129) Przyk³ady praktycznego zastosowania skryptów PHP Jêzyk PHP nie od dziœ stanowi jeden z naj³atwiejszych w nauce i najelastyczniejszych jêzyków programowania. Jego ogromne mo¿liwoœci wykorzystywane s¹ na ogó³ przy tworzeniu interaktywnych stron internetowych, a obiektowy charakter oraz modu³owoœæ stanowi¹ atuty dla programistów, wreszcie zwolnionych z koniecznoœci ustawicznego przepisywania tego samego kodu. Jak ka¿dego innego jêzyka, tak¿e i PHP naj³atwiej nauczyæ siê na konkretnych, praktycznych przyk³adach – wiele z nich zamieszczono w³aœnie w tej ksi¹¿ce. „PHP. Praktyczne projekty” to naprawdê wyj¹tkowy podrêcznik do nauki PHP. Nie spodziewaj siê tu suchych, typowo podrêcznikowych teorii! Znajdziesz w nim za to omówienie wszystkich elementów jêzyka PHP, dzia³ania skryptów, funkcji i bibliotek wraz z dowcipnymi i przejrzystymi przyk³adami ich u¿ycia. Pierwsza czêœæ ksi¹¿ki wprowadzi Ciê w œwiat PHP oraz wyjaœni, jak stosowaæ i ³¹czyæ poszczególne polecenia w dobrze dzia³aj¹cy kod. Z nastêpnych rozdzia³ów wyniesiesz ju¿ umiejêtnoœci czysto praktyczne, dotycz¹ce wszystkich obszarów wykorzystania tego jêzyka przy tworzeniu najró¿niejszych projektów. (cid:129) Instrukcje wyjœciowe i steruj¹ce, sta³e, zmienne, wyra¿enia oraz operatory (cid:129) Funkcje w PHP i ich biblioteki (cid:129) Programowanie obiektowe i formatowanie kodu PHP (cid:129) Podzia³ skryptu na wiele plików i generowanie kodu HTML (cid:129) Przetwarzanie napisów litera po literze i podstawy przetwarzania tablic (cid:129) Tworzenie i wyszukiwanie plików, krojenie plików tekstowych (cid:129) Wyra¿enia regularne i przetwarzanie wsadowe (cid:129) Wybór podstrony serwisu (cid:129) Walidacja zmiennych URL i stosowanie kilku zmiennych URL (cid:129) Szablony Smarty i PHP (cid:129) Wsadowe tworzenie baz danych i ich wizualne projektowanie w programie MySQL Workbench (cid:129) phpMyAdmin, PDO, Propel i inne tajemnicze nazwy (cid:129) Funkcje mysql_xxx (cid:129) Kontroler jednowymiarowy oraz dwuwymiarowy (cid:129) Modu³ mod_rewrite (cid:129) Wzbogacanie aplikacji o obs³ugê przyjaznych URL-i oraz routing przyjaznych adresów URL Przekonaj siê, ¿e PHP mo¿na nauczyæ siê nie tylko szybko, ale i przyjemnie! Spis treĈci Rozdziaä 3. Skäadnia jözyka PHP .................................................... 11 CzöĈè I Rozdziaä 1. Pierwszy skrypt ............................................................................. 13 Jak przebiega wykonanie skryptu PHP? ........................................................................ 13 Uruchamianie skryptów PHP w konsoli ........................................................................ 15 Rozdziaä 2. Podstawy jözyka PHP .................................................................... 17 Pliki .php czy .html? ...................................................................................................... 17 Znaczniki krótkie i dáugie .............................................................................................. 18 Problem z biaáymi znakami ........................................................................................... 18 Wielokrotne otwarcie PHP ............................................................................................ 19 Komentarze w PHP ....................................................................................................... 21 Instrukcje wyjĈciowe i napisy ........................................................ 23 echo i print .................................................................................................................... 23 Napisy ........................................................................................................................... 24 Napisy wielowierszowe .......................................................................................... 25 Umieszczanie biaáych znaków w wydrukach .......................................................... 26 RóĪnica pomiĊdzy apostrofami i cudzysáowem ...................................................... 29 Cytowanie znaków .................................................................................................. 30 Znaki o zadanych kodach ASCII ............................................................................. 30 àączenie napisów .................................................................................................... 31 Rozdziaä 4. Staäe, zmienne, wyraĔenia i operatory ............................................ 33 Staáe ............................................................................................................................... 33 Zmienne ........................................................................................................................ 34 WyraĪenia ..................................................................................................................... 36 Operatory ...................................................................................................................... 38 Instrukcje sterujñce ...................................................................... 41 if .................................................................................................................................... 42 while .............................................................................................................................. 43 do … while .................................................................................................................... 43 for .................................................................................................................................. 44 foreach ........................................................................................................................... 45 switch ............................................................................................................................ 46 break .............................................................................................................................. 47 continue ......................................................................................................................... 48 return ............................................................................................................................. 48 Skáadnia alternatywna ................................................................................................... 48 Rozdziaä 5. 4 PHP. Praktyczne projekty Rozdziaä 6. Funkcje ......................................................................................... 51 Definicja i wywoáanie funkcji ....................................................................................... 51 Zwracanie wyniku ......................................................................................................... 52 Parametry funkcji .......................................................................................................... 53 ZasiĊg zmiennych globalnych ....................................................................................... 54 Rozdziaä 7. Programowanie obiektowe ............................................................. 57 Klasy i obiekty .............................................................................................................. 57 Definicja klasy .............................................................................................................. 58 Obiekty — instancje klasy ............................................................................................ 60 $this — odwoáania do wáasnych skáadowych ................................................................ 61 Skáadowe statyczne ....................................................................................................... 62 Staáe wewnątrz klasy ..................................................................................................... 63 Konstruktor i destruktor ................................................................................................ 64 Dziedziczenie ................................................................................................................ 64 Polimorfizm ................................................................................................................... 66 Wywoáywanie metod klas bazowych ............................................................................ 67 Klasy i metody abstrakcyjne ......................................................................................... 68 Klasy i metody finalne .................................................................................................. 68 Rozdziaä 8. Podziaä skryptu na wiele plików ..................................................... 71 Instrukcje include i require ............................................................................................ 71 RóĪnice pomiĊdzy include i require .............................................................................. 72 Formatowanie kodu PHP ............................................................... 73 Otwarcie kodu PHP ....................................................................................................... 73 WciĊcia .......................................................................................................................... 73 ĝrednik .......................................................................................................................... 74 Kilka instrukcji w jednym wierszu ................................................................................ 74 Komentarze ................................................................................................................... 75 Operatory ...................................................................................................................... 75 Operatory dwuargumentowe ................................................................................... 75 Operatory jednoargumentowe ................................................................................. 77 Operatory specjalne ................................................................................................. 78 Nawiasy grupujące .................................................................................................. 79 Instrukcje sterujące ........................................................................................................ 80 Wywoáanie funkcji ........................................................................................................ 83 Definicja funkcji ............................................................................................................ 83 Definicja klasy .............................................................................................................. 83 Rozdziaä 9. CzöĈè II HTML, napisy, tablice i pliki tekstowe .......................... 85 Rozdziaä 10. Generowanie kodu HTML ............................................................... 87 Projekt 10.1. Tabliczka mnoĪenia ........................................................................... 87 Projekt 10.2. Tabela potĊg ...................................................................................... 89 Projekt 10.3. Tablica wartoĞci funkcji trygonometrycznych ................................... 90 Projekt 10.4. Zestawienie szablonów ...................................................................... 92 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? .......................................................... 93 Rozdziaä 11. Przetwarzanie napisów .................................................................. 95 Projekt 11.1. Karuzela ............................................................................................. 96 Projekt 11.2. Abrakadabra ....................................................................................... 97 Projekt 11.3. Polskie znaki iso-8859-2 .................................................................... 98 Projekt 11.4. Polskie znaki iso-8859-2 oraz windows-1250 .................................... 98 Projekt 11.5. Prezentacja zawartoĞci pliku XML .................................................. 100 Spis treĈci 5 Projekt 11.6. „Deszcz, jesienny deszcz” ................................................................ 101 Projekt 11.7. Przetwarzanie napisów utf-8 znak po znaku .................................... 102 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 102 Rozdziaä 12. Podstawy przetwarzania tablic ..................................................... 105 Projekt 12.1. Auta ................................................................................................. 106 Projekt 12.2. Bezpieczne kolory WWW ............................................................... 106 Projekt 12.3. Osoby ............................................................................................... 107 Projekt 12.4. Kolory nazwane HTML ................................................................... 109 Projekt 12.5. Owoce .............................................................................................. 110 Projekt 12.6. Warzywa .......................................................................................... 111 Projekt 12.7. „Miáosierdzie gminy” ....................................................................... 112 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 113 Rozdziaä 13. Krojenie plików tekstowych ......................................................... 115 Projekt 13.1. 140 kolorów CSS ............................................................................. 116 Projekt 13.2. Nagrody Nobla ................................................................................. 117 Projekt 13.3. Dzieáa literatury Ğwiatowej .............................................................. 118 Projekt 13.4. Flagi ................................................................................................. 119 Projekt 13.5. Autorytety informatyki .................................................................... 120 Projekt 13.6. Polskie wyprawy badawcze ............................................................. 121 Projekt 13.7. Z historii techniki ............................................................................. 122 Projekt 13.8. Odkrycia geograficzne ..................................................................... 124 Projekt 13.9. Przemówienia .................................................................................. 125 Projekt 13.10. Filmy i aktorzy ............................................................................... 126 Projekt 13.11. JĊzyk LOGO — Ğciągawka ............................................................ 127 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 129 Rozdziaä 14. Biblioteki funkcji ......................................................................... 131 Funkcje do krojenia plików ......................................................................................... 131 Funkcja string2HArray() ............................................................................................. 132 Funkcja string2VArray() ............................................................................................. 134 Badanie poprawnoĞci pliku tekstowego ...................................................................... 135 Biblioteka vh-array.inc.php ......................................................................................... 136 Projekt 14.1. Korona Ziemi ................................................................................... 137 Projekt 14.2. Zestawienie publikacji ..................................................................... 138 Projekt 14.3. NajdáuĪsze rzeki Ğwiata .................................................................... 139 Projekt 14.4. Sprawdzanie struktury pliku ............................................................ 141 àamanie tablicy ........................................................................................................... 141 Projekt 14.5. Tabela miniatur ................................................................................ 144 Projekt 14.6. Imiona .............................................................................................. 146 Projekt 14.7. Alfabet ............................................................................................. 147 Konwersja polskich liter — biblioteka pl.inc.php ....................................................... 148 Projekt 14.8. „Rozdziobią nas kruki, wrony” ........................................................ 150 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 151 Rozdziaä 15. Tworzenie plików ......................................................................... 153 Projekt 15.1. Kody polskich liter ........................................................................... 154 Projekt 15.2. KolĊdy ............................................................................................. 156 Projekt 15.3. Generator danych osobowych .......................................................... 157 Projekt 15.4. Transponowanie danych .................................................................. 158 Projekt 15.5. Modyfikacja kolejnoĞci kolumn, porządku i separatora ................... 159 Projekt 15.6. Cyrylica ........................................................................................... 161 Projekt 15.7. Pobieranie powieĞci „KrzyĪacy” ...................................................... 163 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 164 6 PHP. Praktyczne projekty Rozdziaä 16. WyraĔenia regularne .................................................................... 165 PCRE i POSIX ............................................................................................................ 166 Dopasowywanie wzorca .............................................................................................. 166 Skáadnia wyraĪeĔ regularnych PCRE .......................................................................... 168 Znaki ..................................................................................................................... 168 Wyáączanie interpretacji znaków specjalnych ....................................................... 170 Metaznaki i cytowanie metaznaków ..................................................................... 170 Kropka — dowolny znak ...................................................................................... 172 Dopasowany napis ................................................................................................ 173 Zbiór znaków ........................................................................................................ 173 Dopeánienie zbioru znaków ................................................................................... 174 Klasy znaków ........................................................................................................ 175 POSIX-owe klasy znaków .................................................................................... 176 Kotwice ................................................................................................................. 177 Alternatywa ........................................................................................................... 178 Grupowanie ........................................................................................................... 179 Kwantyfikatory ..................................................................................................... 180 Nawroty ................................................................................................................ 183 WyraĪenia zacháanne i leniwe ............................................................................... 183 Przechwytywanie .................................................................................................. 184 Odwoáania wsteczne ............................................................................................. 186 Przechwytywanie nazwane ................................................................................... 187 Modyfikatory ........................................................................................................ 188 àączenie modyfikatorów ....................................................................................... 189 Komentarze ........................................................................................................... 189 Zmiana trybu dopasowania ................................................................................... 189 Przewidywanie ...................................................................................................... 190 Dopasowywanie warunkowe ................................................................................. 191 Grupowanie atomowe ........................................................................................... 192 Projekt 16.1. Encje HTML .................................................................................... 192 Projekt 16.2. Podziaá nazwisk na mĊskie i ĪeĔskie ............................................... 194 Projekt 16.3. Podziaá powieĞci na akapity ............................................................. 196 Projekt 16.4. Jack London: „Martin Eden” — format HTML ............................... 197 Projekt 16.5. Jack London: „Martin Eden” — format LaTeX ............................... 198 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 199 Rozdziaä 17. Wyszukiwanie plików ................................................................... 201 Projekt 17.1. Lista plików ..................................................................................... 202 Projekt 17.2. Tworzenie indeksu wierszy .............................................................. 203 Projekt 17.3. Wiersze Tadeusza RóĪewicza .......................................................... 204 Projekt 17.4. Tabela miniaturowych hiperáączy .................................................... 205 Projekt 17.5. Rekurencyjna konwersja kodowania w podfolderach ...................... 206 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 208 Rozdziaä 18. Przetwarzanie wsadowe ............................................................... 211 Projekt 18.1. Adam Mickiewicz: „Pan Tadeusz” .................................................. 211 Projekt 18.2. Adam Mickiewicz: „Pani Twardowska” .......................................... 213 Projekt 18.3. Jane Austen: „Emma” ...................................................................... 215 Projekt 18.4. Fraszki ............................................................................................. 216 Projekt 18.5. Spis treĞci h3/h4 ............................................................................... 217 Projekt 18.6. Zmiana nazw plików: numeracja ..................................................... 221 Projekt 18.7. Zmiana nazw plików na podstawie treĞci ........................................ 222 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 223 Spis treĈci 7 CzöĈè III Zmienne URL ............................................................ 225 Rozdziaä 19. Wybór podstrony serwisu ............................................................. 227 Projekt 19.1. Opowiadania Edgara Allana Poe ..................................................... 229 Projekt 19.2. Tabela ekstraklasy 2006 – 2007 ....................................................... 232 Projekt 19.3. Kalkulator ........................................................................................ 234 Projekt 19.4. Fraszki ............................................................................................. 237 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 239 Rozdziaä 20. Walidacja zmiennych URL ............................................................ 241 Projekt 20.1. Piosenki Kapeli RadoĞci Maáych ..................................................... 244 Projekt 20.2. Treny ................................................................................................ 246 Projekt 20.3. Znaki drogowe ................................................................................. 247 Projekt 20.4. ûwiczenia z instalacji i konfiguracji sieci komputerowych ............. 250 Projekt 20.5. Stronicowanie tabeli imion .............................................................. 252 Projekt 20.6. PaĔstwa rozpoczynające siĊ na wybraną literĊ ................................. 254 Projekt 20.7. Test czcionek ................................................................................... 257 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 259 Rozdziaä 21. Stosowanie kilku zmiennych URL ................................................. 261 Projekt 21.1. Poezja .............................................................................................. 261 Projekt 21.2. Jack London: „The Call of the Wild” ............................................... 264 Projekt 21.3. Drop folder miniatur ........................................................................ 268 Projekt 21.4. Ligi europejskie ............................................................................... 269 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 274 CzöĈè IV Szablony ................................................................... 277 Rozdziaä 22. Szablony Smarty .......................................................................... 279 Instalacja biblioteki Smarty ......................................................................................... 279 Smarty — skáadnia szablonu ....................................................................................... 280 Projekt 22.1. Smarty — pierwszy skrypt ............................................................... 281 Jak przebiega wykonanie skryptu PHP korzystającego ze Smarty? ............................ 283 Projekt 22.2. Wymiana zmiennych w szablonie .................................................... 284 Modyfikatory zmiennych ............................................................................................ 285 Projekt 22.3. Lorem ipsum — test kilku modyfikatorów ...................................... 286 Projekt 22.4. Piosenka pt. „Jadą, jadą misie” ........................................................ 288 Funkcje Smarty ........................................................................................................... 289 Projekt 22.5. Smarty — owoce ............................................................................. 289 Projekt 22.6. Angielskie czasowniki nieregularne ................................................ 291 Projekt 22.7. Tatry ................................................................................................ 293 Projekt 22.8. Kody polskich znaków ..................................................................... 295 Projekt 22.9. Mecze ekstraklasy w sezonie 2003 – 2004 ...................................... 296 Projekt 22.10. Henryk Sienkiewicz: „Sachem” ..................................................... 299 Projekt 22.11. Maria Konopnicka: „Nasza szkapa” ............................................... 300 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 301 Rozdziaä 23. Pliki tekstowe, zmienne URL i szablony Smarty ............................ 303 Projekt 23.1. PowieĞci Agathy Christie ................................................................. 303 Projekt 23.2. Ogonki DE, FR, PL, RU .................................................................. 307 Projekt 23.3. Fraszki ............................................................................................. 309 Projekt 23.4. Liczba mnoga rzeczowników angielskich ........................................ 312 Projekt 23.5. Sortowanie danych wzglĊdem kilku kolumn ................................... 314 Projekt 23.6. Fotogaleria ....................................................................................... 318 Projekt 23.7. Witryna GIMP w zastosowaniach .................................................... 324 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 330 8 PHP. Praktyczne projekty Rozdziaä 24. Szablony PHP .............................................................................. 331 Zadania szablonów ...................................................................................................... 331 Projekt 24.1. Przekazanie zmiennych do szablonu ................................................ 332 Projekt 24.2. Modyfikatory zmiennych ................................................................. 333 Projekt 24.3. Iteracyjne przetwarzanie tablic ........................................................ 334 Projekt 24.4. Instrukcja if ...................................................................................... 335 Projekt 24.5. Maria Konopnicka: „Nasza szkapa” ................................................ 336 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 338 Rozdziaä 25. Szablony Smarty i szablony PHP — porównanie ............................ 339 Projekt 25.1. Ukáady cyfrowe — szablony Smarty ............................................... 339 Projekt 25.2. Ukáady cyfrowe — szablony PHP ................................................... 342 Projekt 25.3. Zbiór zadaĔ z C++ — szablony Smarty ........................................... 344 Projekt 25.4. Zbiór zadaĔ z C++ — szablony PHP ............................................... 346 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 348 Bazy danych .............................................................. 351 CzöĈè V Rozdziaä 26. Wsadowe tworzenie baz danych ................................................... 353 Model komunikacji klient-serwer ................................................................................ 353 Baza danych, tabela, rekord, kolumna ......................................................................... 355 Konsola mysql ............................................................................................................. 357 Skrypty wsadowe .sql oraz .bat ................................................................................... 360 Projekt 26.1. Baza danych wyrazy ........................................................................ 360 Wsadowe wstawianie rekordów .................................................................................. 363 Projekt 26.2. Wypeánianie bazy samochody ......................................................... 363 Projekt 26.3. Wypeánianie bazy danych z wykorzystaniem Smarty ...................... 366 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 367 Rozdziaä 27. phpMyAdmin — narzödzie do edycji i analizy zawartoĈci baz danych ................................................................. 369 Projekt 27.1. Województwa .................................................................................. 371 Polskie znaki w bazie danych ...................................................................................... 375 Projekt 27.2. Imiona .............................................................................................. 376 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 379 Rozdziaä 28. Wizualne projektowanie baz danych w programie MySQL Workbench .................................................. 381 Projekt 28.1. Wizualny projekt bazy danych wyrazy ............................................ 381 Projekt 28.2. PaĔstwa-miasta: identyfikująca relacja 1:n ...................................... 387 Projekt 28.3. KsiąĪka-kategoria: nieidentyfikująca relacja 1:n ............................. 391 Projekt 28.4. Filmy-aktorzy: relacja n:m ............................................................... 395 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 397 Interfejsy API dostöpu do bazy danych ....................... 399 CzöĈè VI Rozdziaä 29. Funkcje mysql_xxx ...................................................................... 401 Projekt 29.1. Imiona .............................................................................................. 403 Projekt 29.2. Filmy ................................................................................................ 406 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 412 Rozdziaä 30. PDO ............................................................................................ 415 Projekt 30.1. Imiona .............................................................................................. 416 Projekt 30.2. Filmy ................................................................................................ 418 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 420 Spis treĈci 9 Rozdziaä 31. Propel ......................................................................................... 421 Projekt 31.1. Imiona .............................................................................................. 421 Projekt 31.2. Filmy ................................................................................................ 428 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 439 CzöĈè VII MVC .......................................................................... 441 Rozdziaä 32. Jednowymiarowy kontroler MVC ................................................... 443 Projekt 32.1. Piosenki ........................................................................................... 443 Projekt 32.2. Poezja .............................................................................................. 449 Projekt 32.3. Filmy ................................................................................................ 454 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 458 Rozdziaä 33. db-frame-tool. Skrypty uäatwiajñce uruchamianie generatora Propel ....461 Projekt 33.1. db-frame-tool ................................................................................... 462 Projekt 33.2. Aplikacja kluby piákarskie ............................................................... 468 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 470 Rozdziaä 34. Obiektowa implementacja kontrolera jednowymiarowego .............. 471 Projekt 34.1. Katalog páyt winylowych — implementacja bez wykorzystania programowania obiektowego .................. 471 Projekt 34.2. Katalog páyt winylowych — implementacja obiektowa .................. 474 Projekt 34.3. Kluby piákarskie — kontroler obiektowy ......................................... 478 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 480 Rozdziaä 35. Moduä/akcja, czyli kontroler dwuwymiarowy ................................ 481 Projekt 35.1. PowieĞci A. Christie ........................................................................ 481 Projekt 35.2. Katalog páyt winylowych ................................................................. 488 Projekt 35.3. Ukáady cyfrowe ............................................................................... 490 Projekt 35.4. Kontynenty, paĔstwa i flagi ............................................................. 494 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 496 CzöĈè VIII Przyjazne adresy URL ................................................ 499 Rozdziaä 36. Moduä mod_rewrite ...................................................................... 501 Projekt 36.1. Translacja adresu adres.html na index.php ...................................... 502 Projekt 36.2. Wykluczanie adresu index.php ........................................................ 504 Projekt 36.3. Ustalanie zmiennych URL na podstawie fragmentu adresu ............. 505 Projekt 36.4. Eliminacja adresów o rozszerzeniu .php w projekcie 36.3 ............... 507 Projekt 36.5. KolĊdy ............................................................................................. 508 Projekt 36.6. KolĊdy — wykluczanie adresów .php ............................................. 510 Projekt 36.7. KolĊdy — generowanie pliku .htaccess .............................................. 511 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 514 Rozdziaä 37. Wzbogacane aplikacji o obsäugö przyjaznych adresów URL ............ 515 Projekt 37.1. HTML, XHTML i CSS. Praktyczne projekty .................................. 515 Projekt 37.2. HTML, XHTML i CSS. Praktyczne projekty — rozwiązanie wzbogacone o obsáugĊ przyjaznych adresów URL .................... 518 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 520 Rozdziaä 38. Routing przyjaznych adresów URL ................................................ 521 Projekt 38.1. Ptaki ................................................................................................. 522 Projekt 38.2. Mundial ............................................................................................ 526 Czego powinieneĞ nauczyü siĊ z tego rozdziaáu? ........................................................ 534 Skorowidz ................................................................................... 537 Rozdziaä 23. Pliki tekstowe, zmienne URL i szablony Smarty Po omówieniu podstawowych zagadnieĔ dotyczących szablonów Smarty przechodzimy do poáączenia kilku opanowanych juĪ elementów. Wykorzystując:  pliki tekstowe,  zmienne URL  oraz szablony Smarty, moĪemy przystąpiü do opracowywania skryptów, których struktura bĊdzie ewoluowaáa w kierunku architektury MVC. Projekt 23.1. PowieĈci Agathy Christie Folder agatha-christie-dane/ zawiera pliki tekstowe z opisem powieĞci Agathy Christie. KaĪdy plik opisuje jedną powieĞü. Na przykáad w pliku o nazwie 4-50-from-paddington.txt zawarty jest opis ksiąĪki zatytuáowanej 4.50 from Paddington: TITLE|4.50 from Paddington YEAR|1957 TYPE|Novel BEST|no DETECTIVE|Miss Marple METHOD|Poison,Strangling Opis zawiera tytuá utworu, rok wydania, rodzaj, informacjĊ logiczną, czy dana ksiąĪka naleĪy do kanonu najlepszych utworów pisarki, nazwisko detektywa oraz metody zbrodni opisane w ksiąĪce. Dodatkowo plik 00lista.log zawiera listĊ wszystkich powieĞci zawar- tych w folderze agatha-christie-dane/: 304 CzöĈè IV i Szablony 4.50 from Paddington*agatha-christie-dane/4-50-from-paddington.txt A Caribbean Mystery*agatha-christie-dane/a-caribbean-mystery.txt A Murder Is Announced*agatha-christie-dane/a-murder-is-announced.txt ... Przygotuj skrypt PHP, który przedstawi menu z listą wszystkich tytuáów powieĞci. KaĪda pozycja menu ma byü hiperáączem do strony prezentującej szczegóáowe dane wybranego utworu. Rozwiązanie zadania rozpoczynamy od ustalenia przestrzeni adresów URL. Witryna ma prezentowaü dwa rodzaje stron: menu z listą utworów oraz szczegóáowe informacje na temat wybranej powieĞci. Strona prezentująca menu bĊdzie miaáa adres index.php, zaĞ szczegó- áowe dane ksiąĪek zaadresujemy: index.php?id=X gdzie X bĊdzie identyfikatorem wybranej powieĞci. Identyfikator ten bĊdzie numerem wiersza w pliku 00lista.log. Pierwszy wiersz pliku zawiera dane powieĞci pt. 4.50 from Paddington, a zatem adres: index.php?id=1 BĊdzie on powodowaá wyĞwietlenie szczegóáowych danych dotyczących utworu 4.50 from Paddington. Drugi wiersz w pliku 00lista.log wskazuje utwór pt. A Caribbean Mystery, a wiĊc adres: index.php?id=2 bĊdzie prezentowaá szczegóáowe dane tej wáaĞnie powieĞci. I tak dalej. PrzestrzeĔ adresów URL stosowanych w skrypcie bĊdzie wiĊc nastĊpująca: index.php menu z listæ wszystkich powieħci index.php?id=1 szczegóđy utworu: 4.50 from Paddington index.php?id=2 szczegóđy utworu: A Caribbean Mystery index.php?id=3 szczegóđy utworu: A Murder Is Announced ... Menu witryny przyjmie postaü: ol li a href= index.php?id=1 4.50 from Paddington /a /li li a href= index.php?id=2 A Caribbean Mystery /a /li li a href= index.php?id=3 A Murder Is Announced /a /li ... /ol Skrypt PHP zostaá przedstawiony na listingu 23.1. Po odczytaniu i pokrojeniu pliku 00lista.log tworzymy w zmiennej $s nowy obiekt Smarty. NastĊpnie sprawdzamy, która strona zostaáa wybrana. JeĞli zmienna URL o nazwie id zostaáa podana (tj. funkcja isset() zwraca logiczną prawdĊ) oraz jest to poprawna liczba caákowita z zakresu od 1 do $d[ rows ] (tj. funkcja str_ievpifr() ma wartoĞü true), to wybrana zostaáa strona jednego Rozdziaä 23. i Pliki tekstowe, zmienne URL i szablony Smarty 305 z utworów. Numer wybranego utworu1 umieszczamy w zmiennej $nr, po czym odczytu- jemy i kroimy plik zawierający opis utworu o podanym numerze. Nazwa pliku z opisem utworu jest dostĊpna w zmiennej $d pod indeksami: $d[ items ][1][$nr] Pokrojona tablica trafia do szablonu pod nazwą utwor (metoda assign()), zaĞ zmienna $akcja otrzymuje wartoĞü utwor. JeĞli zmienna URL o nazwie id nie zostaáa podana, bądĨ jej wartoĞü jest niepoprawna, to do szablonu trafia lista wszystkich tytuáów powieĞci zawarta w zmiennej $d[ items ][0]. Tablica ta zostaje przekazana do szablonu pod nazwą menu, zaĞ zmiennej $akcja przypi- sujemy wartoĞü glowna. Na zakoĔczenie tworzenia skryptu PHP do szablonu przekazujemy zmienną $akcja, po czym szablon przetwarzamy i wyĞwietlamy. Podsumowując, w zaleĪnoĞci od wartoĞci zmiennej URL o nazwie id do szablonu przeka- zujemy:  zmienną akcja o wartoĞci utwor oraz zmienną utwor, która zawiera pokrojony plik z opisem wybranej powieĞci,  lub zmienną akcja o wartoĞci glowna oraz zmienną menu zawierającą tytuáy wszystkich utworów. Szablon Smarty jest przedstawiony na listingu 23.2. Zawiera on funkcjĊ if, która decyduje o tym, czy wyĞwietliü naleĪy menu, czy szczegóáowe dane jednej z ksiąĪek: {if $akcja == glowna } ... wyħwietlamy menu {elseif $akcja == utwor } ... wyħwietlamy szczegóđowe dane ksiæľki {/if} Menu jest produkowane za pomocą pĊtli section, która przetwarza tablicĊ $menu. WartoĞü zmiennej id umieszczanej w parametrze href hiperáącza powstaje na podstawie zmiennej iteration funkcji section: {section name=i loop=$menu} li a href= index.php?id={$smarty.section.i.iteration} {$menu[i]} /a /li {/section} Natomiast szczegóáowe dane utworu produkujemy, przetwarzając iteracyjnie tablicĊ $utwor. PoniewaĪ plik tekstowy zawiera zarówno etykiety (np. TITLE, YEAR, DETECTIVE), jak i dane (np. 4.50 from Paddington, 1957, Miss Marple), zatem elementy tablicy są wykorzystane zarówno wewnątrz komórek td, jak i komórek nagáówkowych th. 1 Numer wybrany z menu jest zmniejszany o jeden, gdyĪ w menu stosujemy numeracjĊ od 1 do n, zaĞ indeksem tablicy jest liczba od 0 do n – 1. 306 CzöĈè IV i Szablony Menu zawarte w liĈcie ol jest zaprezentowane w postaci czterech kolumn dziöki nastöpujñcym stylom CSS: ol { float: left; list-style-type: none; } li { width: 300px; float: left; } Listing 23.1. Projekt 23.1 pt. PowieĞci Agathy Christie — skrypt index.php $p = file_get_contents( 00lista.log ); $d = string2VArray($p, * ); $s = new Smarty(); if (isset($_GET[ id ]) str_ievpifr($_GET[ id ], 1, $d[ rows ])) { $nr = $_GET[ id ] - 1; $utwor = string2HArray(file_get_contents($d[ items ][1][$nr])); $s- assign( utwor , $utwor[ items ]); $akcja = utwor ; } else { $s- assign( menu , $d[ items ][0]); $akcja = glowna ; } $s- assign( akcja , $akcja); $s- display( index.tpl ); Listing 23.2. Projekt 23.1 pt. PowieĞci Agathy Christie — szablon index.tpl body h1 a href= index.php Agatha Christie /a /h1 {if $akcja == glowna } h2 15 wrzeħnia 1890 mdash; 12 stycznia 1976 /h2 ol {section name=i loop=$menu} li a href= index.php?id={$smarty.section.i.iteration} {$menu[i]} /a /li {/section} /ol {elseif $akcja == utwor } table {section name=i loop=$utwor} tr th {$utwor[i][0]} /th td {$utwor[i][1]} /td /tr {/section} /table {/if} /body Rozdziaä 23. i Pliki tekstowe, zmienne URL i szablony Smarty 307 Projekt 23.2. Ogonki DE, FR, PL, RU Napisz skrypt, który przedstawi w postaci witryny WWW zestawienie znaków diakry- tycznych wystĊpujących w kilku jĊzykach. Witryna ma mieü menu gáówne prezentujące listĊ wszystkich dostĊpnych jĊzyków. Po wybraniu jĊzyka z listy naleĪy przedstawiü — w postaci tabeli HTML — listĊ znaków diakrytycznych wystĊpujących w danym jĊzyku wraz z przykáadami uĪycia. DomyĞlną stroną witryny ma byü pierwszy z dostĊp- nych jĊzyków. W zadaniu wykorzystaj plik jezyki.txt oraz pliki de.txt, fr.txt, pl.txt i ru.txt. Plik jezyki.txt zawiera listĊ wszystkich dostĊpnych jĊzyków: Francuski|FR|fr.txt Niemiecki|DE|de.txt Polski|PL|pl.txt Rosyjski|RU|ru.txt To na jego podstawie ma powstaü menu witryny. KaĪdy z plików de.txt, fr.txt, pl.txt oraz ru.txt wymienionych w pliku jezyki.txt ma identyczną strukturĊ. Pierwsza kolumna zawiera znak, druga kolumna zawiera encjĊ, a trzecia — przykáad uĪycia danej litery. Początkowe wiersze pliku fr.txt są nastĊpujące: #x00e0;| amp;#x00e0;| #x00e0; bient #x00f4;t #x00c0;| amp;#x00c0;| #x00c0; BIENT #x00d4;T #x00e2;| amp;#x00e2;|g #x00e2;teau ... Ustalmy adresy URL, jakie bĊdą stosowane w rozwiązaniu. Plik jezyki.txt zawiera kolejno wymienione jĊzyki francuski, niemiecki, polski oraz rosyjski. Zatem adresy URL przyjmą postaü:  index.php?id=1 — strona prezentująca ogonki francuskie,  index.php?id=2 — strona prezentująca ogonki niemieckie,  index.php?id=3 — strona prezentująca ogonki polskie,  index.php?id=4 — strona prezentująca ogonki rosyjskie. Stroną domyĞlną bĊdzie strona prezentująca litery francuskie. Podanie adresu index.php bĊdzie wiĊc powodowaáo wyĞwietlenie strony opisującej jĊzyk francuski. Menu strony w kodzie HTML przyjmie postaü: ol id= menu li a href= index.php?id=1 Francuski /a /li li a href= index.php?id=2 Niemiecki /a /li li a href= index.php?id=3 Polski /a /li li a href= index.php?id=4 Rosyjski /a /li /ol Skrypt index.php jest przedstawiony na listingu 23.3. PracĊ rozpoczynamy od odczytania i pokrojenia pliku jezyki.txt. NastĊpnie w zmiennej $nr ustalamy numer domyĞlnej podstrony serwisu, po czym sprawdzamy obecnoĞü i poprawnoĞü zmiennej $_GET[ id ]. JeĞli zmienna 308 CzöĈè IV i Szablony ta jest obecna (tj. funkcja isset() zwraca true) oraz poprawna (tj. funkcja str_ievpifr() zwraca true), to wartoĞü zmiennej $_GET[ id ] pomniejszoną o jeden zapamiĊtujemy w zmiennej $nr. Gdy w zmiennej $nr ustalony jest numer wybranego jĊzyka (jest to albo wartoĞü domyĞlna 0, albo wartoĞü wybrana z menu), odczytujemy i kroimy odpowiedni plik tekstowy. Jego nazwa jest dostĊpna w zmiennej $k[ items ][2][$nr]. Na zakoĔczenie tworzymy obiekt Smarty i przekazujemy do niego dwie zmienne: pokrojony plik jezyki.txt (zmienna szablonu bĊdzie siĊ nazywaáa menu) oraz pokrojony plik z ogonkami wybranego jĊzyka (zmienna szablonu bĊdzie siĊ nazywaáa jezyk). Szablon ogonki.tpl zostaá przedstawiony na listingu 23.4. Menu powstaje przez iteracyjne przetworzenie tablicy $menu. Tym razem zamiast funkcji section stosujemy funkcjĊ foreach: ol id= menu {foreach from=$menu item=opcja name=m} li a href= index.php?id={$smarty.foreach.m.iteration} {$opcja} /a /li {/foreach} /ol W podobny sposób na stronie WWW umieszczamy tabelĊ prezentującą litery z ogonkami: {foreach from=$jezyk item=litera} tr td {$litera[0]} /td td {$litera[1]} /td td {$litera[2]} /td /tr {/foreach} Listing 23.3. Projekt 23.2 pt. Ogonki DE, FR, PL, RU — skrypt index.php $k = string2VArray(file_get_contents( jezyki.txt )); $nr = 0; if (isset($_GET[ id ]) str_ievpifr($_GET[ id ], 1, $k[ rows ])) { $nr = $_GET[ id ] - 1; } $jezyk = string2HArray(file_get_contents($k[ items ][2][$nr])); $s = new Smarty; $s- assign( menu , $k[ items ][0]); $s- assign( jezyk , $jezyk[ items ]); $s- display( ogonki.tpl ); Listing 23.4. Projekt 23.2 pt. Ogonki DE, FR, PL, RU — szablon index.tpl body ol id= menu {foreach from=$menu item=opcja name=m} li a href= index.php?id={$smarty.foreach.m.iteration} {$opcja} /a /li {/foreach} Rozdziaä 23. i Pliki tekstowe, zmienne URL i szablony Smarty 309 /ol div id= content table tr th znak /th th encja /th th przykđad /th /tr {foreach from=$jezyk item=litera} tr td {$litera[0]} /td td {$litera[1]} /td td {$litera[2]} /td /tr {/foreach} /table /div /body Projekt 23.3. Fraszki Przygotuj witrynĊ prezentującą fraszki Jana Kochanowskiego, wykorzystując szablony Smarty. UĪyj danych z projektu 19.4. Projekt ten stosuje nastĊpujące adresy URL: index.php?id=1 fraszka Do goħcia index.php?id=2 fraszka Na naboľnæ index.php?id=3 fraszka Na staræ ... skrypt powinien wiĊc generowaü takie oto menu HTML: ol li a href= index.php?id=1 Do goħcia /a /li li a href= index.php?id=2 Na naboľnæ /a /li li a href= index.php?id=3 Na staræ /a /li ... /ol Rozwiązanie zadania jest przedstawione na listingach 23.5 oraz 23.6. Fraszki są zawarte w plikach tekstowych w folderze fraszki/. Skrypt index.php rozpoczyna siĊ wiĊc od wyszu- kania wszystkich fraszek za pomocą funkcji glob(). NastĊpnie tworzymy tablicĊ $tytuly, w której umieszczamy tytuáy wszystkich znalezionych fraszek. DziĊki uĪyciu w pĊtli foreach zmiennej $k oraz dziĊki wykorzystaniu indeksu $k +1 indeksacja w tablicy $tytuly rozpocznie siĊ od 1, a nie od 0. NastĊpnie przeprowadzamy walidacjĊ zmiennej $_GET[ id ]. JeĞli zmienna ta jest podana, a jej wartoĞü jest poprawna, to zapamiĊtujemy ją w zmiennej $nr. W przeciwnym razie zmienna $nr przyjmuje wartoĞü domyĞlną 1 (czyli domyĞlnie wyĞwietlamy treĞü pierwszej dostĊpnej fraszki). 310 CzöĈè IV i Szablony W kolejnym kroku na podstawie zmiennej $nr odczytujemy plik z treĞcią fraszki, po czym tworzymy dwie zmienne: $tytul oraz $tresc. Pierwsza z nich bĊdzie zawieraáa tytuá, a druga treĞü wybranej fraszki. Na zakoĔczenie przygotowane zmienne przekazujemy do szablonu. BĊdą to:  tytuly — indeksowana od 1 tablica z tytuáami wszystkich fraszek (potrzebna do menu),  tytul — tytuá wybranej fraszki,  tresc — treĞü wybranej fraszki. Przetworzenie szablonu wykonujemy, tym razem wywoáując funkcjĊ fetch(): $strona = $s- fetch( index.tpl ); Metoda ta zwraca w postaci napisu przetworzony szablon. Szablon ten moĪemy zapisaü w pliku, w bazie danych lub wysáaü do przeglądarki za pomocą instrukcji echo: echo $strona; Przedstawiony na listingu 23.6 szablon index.tpl wykorzystuje trzy zmienne: $tytuly, $tytul oraz $tresc. Menu strony powstaje na podstawie tablicy $tytuly. W pĊtli foreach stosujemy atrybut key, dziĊki czemu mamy dostĊp do identyfikatora kolejnej fraszki. Identyfikatorem tym2 jest indeks w tablicy $tytuly: ol {foreach from=$menu key=myId item=fraszka} li a href= index.php?id={$myId} {$fraszka} /a /li {/foreach} /ol TreĞü fraszki przeksztaácamy modyfikatorem nl2br i umieszczamy wewnątrz elementu p: p {$tresc|nl2br} /p ZaĞ tytuá fraszki pojawia siĊ w tytule strony WWW: title Jan Kochanowski: Fraszki: {$tytul} /title Szablony Smarty pozwalajñ na iteracyjne przetwarzanie tablic. Dziöki temu kod PHP nie zawiera Ĕadnych znaczników HTML. Menu HTML wykorzystuje funkcjö foreach i jest zawarte w szablonie .tpl. Takie rozwiñzanie jest zastosowane w projekcie 23.3. JeĈli szablon jest wypeäniany danymi przy uĔyciu funkcji str_replace(), kod PHP bödzie zawieraä niektóre znaczniki, gdyĔ metoda ta nie pozwala na iteracyjne przetwarzanie tablic. Analizujñc kod projektu 19.4, zauwaĔymy, Ĕe menu HTML jest generowane we- wnñtrz skryptu PHP w funkcji generuj_menu(). Taka separacja prezentacji i przetwa- rzania nie jest peäna. Jest to rozwiñzanie gorsze od rozwiñzania stosujñcego Smarty. 2 W poprzednich projektach tego rozdziaáu identyfikator wybranej pozycji menu powstawaá na podstawie zmiennej {$smarty.section.i.iteration} lub {$smarty.foreach.m.iteration}. Rozdziaä 23. i Pliki tekstowe, zmienne URL i szablony Smarty 311 Listing 23.5. Projekt 23.3 pt. Fraszki — skrypt index.php $plks = glob( fraszki/*.txt ); $tytuly = array(); foreach ($plks as $k = $plk) { $p = file($plk); $tytuly[$k + 1] = trim($p[1]); } if (isset($_GET[ id ]) str_ievpifr($_GET[ id ], 1, count($plks))) { $nr = $_GET[ id ]; } else { $nr = 1; } $plk = file($plks[$nr - 1]); $tytul = trim($plk[1]); $plk[0] = ; $plk[1] = ; $tresc = trim(implode( , $plk)); $s = new Smarty(); $s- assign( menu , $tytuly); $s- assign( tytul , $tytul); $s- assign( tresc , $tresc); $strona = $s- fetch( index.tpl ); echo $strona; Listing 23.6. Projekt 23.3 pt. Fraszki — szablon index.tpl html head title Jan Kochanowski: Fraszki: {$tytul} /title /head body ... ol {foreach from=$menu key=myId item=fraszka} li a href= index.php?id={$myId} {$fraszka} /a /li {/foreach} /ol ... div id= tresc p {$tresc|nl2br} /p /div ... /body /html 312 CzöĈè IV i Szablony Projekt 23.4. Liczba mnoga rzeczowników angielskich Przygotuj witrynĊ prezentującą zestawienie metod tworzenia liczby mnogiej rzeczowni- ków w jĊzyku angielskim. Dane projektu są zawarte w folderze plural-nouns/. Plik 00lista.log zawiera listĊ róĪnych przypadków. KaĪdy wiersz tego pliku opisuje jedną metodĊ tworzenia liczby mnogiej. Pierwsze trzy wiersze pliku mają postaü3: rarr;-s*plural-nouns/01.txt rarr;-es*plural-nouns/02.txt -y rarr;-ies*plural-nouns/03.txt ... Separatorem w pliku jest znak *. Pierwszy wiersz opisuje podstawową metodĊ tworzenia liczby mnogiej, dodanie koĔcówki -s ( rarr;-s). Przykáady rzeczowników tej grupy są zawarte w pliku plural-nouns/01.txt. Drugi wiersz opisuje drugą metodĊ: dodawanie koĔcówki -es ( rarr;-es). Przykáady dla tej grupy są zawarte w pliku plural-nouns/02.txt. Wreszcie trzeci wiersz pliku 00lista.log opisuje grupĊ rzeczowników, w której koĔcówka -y zostaje zastąpiona koĔcówką -ies (-y rarr;-ies). Przykáady takich rzeczowników są zapisane w pliku plural-nouns/03.txt. I tak dalej. KaĪdy z plików 01.txt, 02.txt, 03.txt, ... ma tĊ samą strukturĊ. Na przykáad plik 03.txt zawiera: spy:spies poppy:poppies penny:pennies Są to kolejne przykáady tworzenia liczby mnogiej poprzez zamianĊ koĔcówki –y na koĔcówkĊ –ies. Separatorem w pliku jest znak dwukropka. Pierwszy wyraz jest w liczbie pojedynczej, zaĞ drugi — w liczbie mnogiej. Na podstawie pliku 00lista.log stwierdzamy, Īe witryna bĊdzie stosowaáa nastĊpujące URL-e: index.php?id=1 pierwszy rodzaj rzeczowników; plik: 01.txt; etykieta menu: rarr;-s index.php?id=2 drugi rodzaj rzeczowników; plik 02.txt; etykieta menu: rarr;-es index.php?id=3 trzeci rodzaj rzeczowników; plik 03.txt; etykieta menu: -y rarr;-ies itd. 3 Encja rarr; to strzaáka w prawo. Rozdziaä 23. i Pliki tekstowe, zmienne URL i szablony Smarty 313 Zatem w jĊzyku HTML menu przyjmie postaü: ol id= menu li a href= index.php?id=1 rarr;-s /a /li li a href= index.php?id=2 rarr;-es /a /li li a href= index.php?id=3 -y rarr;-ies /a /li ... /ol Listingi 23.7 oraz 23.8 przedstawiają rozwiązanie zadania, czyli skrypt index.php oraz szablon index.tpl. Przetwarzanie w skrypcie PHP rozpoczynamy od pokrojenia pliku 00lista.log. NastĊpnie przeprowadzamy walidacjĊ zmiennej $_GET[ id ]. Po wykonaniu walidacji zmienna $nr zawiera indeks wybranego przypadku. Na podstawie numeru $nr odczytujemy i kroimy plik z przykáadami dla danego przypadku: $plurals = file_get_contents($menu[ items ][$nr][1]); $plurals = string2HArray($plurals, : ); oraz ustalamy tytuá, który umieĞcimy w elemencie h1. Tytuá ten pochodzi z pokrojonego pliku 00lista.log, z elementu o indeksie $nr: $title = $menu[ items ][$nr][0]; Trzy zmienne:  $menu — pokrojony plik 00lista.log,  $title — etykietĊ wybranego przypadku,  $plurals — przykáady wybranego przypadku przekazujemy do szablonu pod tymi samymi nazwami, zaĞ przetworzony szablon wysy- áamy do przeglądarki. Szablon Smarty jest przedstawiony na listingu 23.8. Zmienna $menu jest wykorzystana do wygenerowania menu witryny: ol id= menu {section name=i loop=$menu.items} li a href= index.php?id={$smarty.section.i.iteration} {$menu.items[i][0]} /a /li {/section} /ol Tytuá pojawia siĊ w elemencie h1: h1 {$title} /h1 zaĞ tablica $plurals sáuĪy do wygenerowania tabeli z przykáadowymi formami liczby mnogiej: {section name=i loop=$plurals.items} tr td {$plurals.items[i][0]} /td td {$plurals.items[i][1]} /td /tr {/section} 314 CzöĈè IV i Szablony Listing 23.7. Projekt 23.4 pt. Liczba mnoga rzeczowników angielskich — skrypt index.php $p = file_get_contents( plural-nouns/00lista.log ); $menu = string2HArray($p, * ); if (isset($_GET[ id ]) str_ievpifr($_GET[ id ], 1, $menu[ rows ])) { $nr = $_GET[ id ] - 1; } else { $nr = 0; } $plurals = file_get_contents($menu[ items ][$nr][1]); $plurals = string2HArray($plurals, : ); $title = $menu[ items ][$nr][0]; $s = new Smarty; $s- assign( menu , $menu); $s- assign( title , $title); $s- assign( plurals , $plurals); $s- display( index.tpl ); Listing 23.8. Projekt 23.4 pt. Liczba mnoga rzeczowników angielskich — szablon index.tpl ol id= menu {section name=i loop=$menu.items} li a href= index.php?id={$smarty.section.i.iteration} {$menu.items[i][0]} /a /li {/section} /ol ... h1 {$title} /h1 ... table tr th singular /th th plural /th /tr {section name=i loop=$plurals.items} tr td {$plurals.items[i][0]} /td td {$plurals.items[i][1]} /td /tr {/section} /table Projekt 23.5. Sortowanie danych wzglödem kilku kolumn Plik dane.txt zawiera dane osobowe: imiĊ, nazwisko, wiek, páeü oraz staĪ pracy: Jan:Nowak:78:M:43 Tomasz:Kwiecieē:34:M:12 Anna:Jarocka:43:K:22 ... Rozdziaä 23. i Pliki tekstowe, zmienne URL i szablony Smarty 315 Napisz skrypt PHP, który przedstawi dane z pliku w postaci tabeli HTML. Zadanie roz- wiąĪ w taki sposób, by dane moĪna byáo sortowaü rosnąco oraz malejąco wzglĊdem do- wolnej kolumny. Dane zawierają piĊü kolumn, zaĞ kaĪda kolumna moĪe byü uporządkowana na dwa spo- soby: rosnąco lub malejąco. Zatem potrzebujemy dziesiĊciu róĪnych adresów URL. W projekcie 21.4 uĪyliĞmy dwóch zmiennych URL. Jedna z nich decydowaáa o numerze kolumny, a druga — o tym, czy sortowanie ma byü rosnące, czy malejące, na przykáad: ligi.php?liga=1 kolumna=5 order=asc Tym razem uĪyjemy jednej zmiennej o nazwie s, która przyjmie wartoĞci 1, –1, 2, –2, 3, –3 itd. WartoĞü 1: index.php?s=1 oznacza, Īe dane naleĪy posortowaü rosnąco wzglĊdem pierwszej kolumny, zaĞ wartoĞü –1: index.php?s=-1 ustala porządek malejący wzglĊdem pierwszej kolumny. Oto lista pierwszych szeĞciu adresów URL: index.php?s=1 sortowanie rosnæce wg pierwszej kolumny (imie) index.php?s=-1 sortowanie malejæce wg pierwszej kolumny (imie) index.php?s=2 sortowanie rosnæce wg drugiej kolumny (nazwisko) index.php?s=-2 sortowanie malejæce wg drugiej kolumny (nazwisko) index.php?s=3 sortowanie rosnæce wg trzeciej kolumny (wiek) index.php?s=-3 sortowanie malejæce wg trzeciej kolumny (wiek) PowyĪsze adresy bĊdą uĪyte w komórkach nagáówkowych tabeli HTML. Kolumna pierwsza bĊdzie zawieraáa nagáówek: th a href= sortuj.php?s=1 Imiú /a /th Po klikniĊciu powyĪszego hiperáącza zostanie wydrukowana strona WWW zawierająca dane posortowane rosnąco wzglĊdem imion. Hiperáącze zawarte w nagáówku zostanie zamienione na: th a href= sortuj.php?s=-1 Imiú /a /th tak, by ponowne klikniĊcie nagáówka kolumny ImiĊ spowodowaáo posortowanie malejące wzglĊdem imion. Rozwiązanie zadania jest przedstawione na listingach 23.9 oraz 23.10. Skrypt index.php z listingu 23.9 rozpoczyna siĊ od zdefiniowania tablicy $kolumny. Zawiera ona etykiety wszystkich kolumn oraz wartoĞci zmiennej s. DziĊki podaniu indeksu pierwszego elementu tablicy (tj. 1 = ) indeksacja elementów rozpocznie siĊ od 1. Tablica ta zostanie wykorzy- stana do wygenerowania hiperáączy zawartych w komórkach nagáówkowych tabeli. NastĊpnie tworzymy tablicĊ $wartosci_url, którą wykorzystamy do sprawdzenia popraw- noĞci zmiennej $_GET[ s ]. Walidacja wartoĞci zmiennej s polega na stwierdzeniu, Īe taka zmienna istnieje (funkcja isset()) oraz Īe jest to jedna z dopuszczalnych wartoĞci, zawartych w utworzonej wczeĞniej tablicy $wartosci_url: 316 CzöĈè IV i Szablony if (isset($_GET[ s ]) in_array($_GET[ s ], $wartosci_url)) { ... } else { ... } JeĞli zmienna s jest poprawna, to w zmiennej $kryterium zapamiĊtujemy jej wartoĞü, po czym za pomocą podanych instrukcji: $indeks = abs($kryterium); $kolumny[$indeks][ sortowanie ] = -$kryterium; przestawiamy porządek sortowania wybranej kolumny na przeciwny. DziĊki temu na stronie prezentującej dane posortowane rosnąco (np. index.php?s=3) pojawi siĊ hiperáącze odsyáające do strony sortującej malejąco (np. index.php?s=-3). W przypadku gdy zmienna s nie jest podana lub jest niepoprawna, ustalamy domyĞlne sortowanie rosnące wzglĊdem nazwisk (tj. kolumny drugiej). W takim przypadku hiper- áącze w nagáówku kolumny drugiej musi wskazywaü adres index.php?s=-2: $kryterium = 2; $kolumny[2][ sortowanie ] = -2; W nastĊpnym kroku odczytujemy i kroimy plik danych. Pokrojoną dwuwymiarową tablicĊ przypisujemy do zmiennej $dane. NastĊpująca potem instrukcja switch, sterowana zmienną $kryterium, sortuje tablicĊ $dane wzglĊdem wybranego kryterium. Na zakoĔczenie do szablonu przekazujemy posortowane dane (zmienna $dane) oraz tablicĊ, na podstawie której powstaną komórki nagáówkowe (zmienna $kolumny). Szablon przedstawiony na listingu 23.10 zawiera pĊtle foreach oraz pĊtlĊ section. Pierwsza z nich generuje komórki nagáówkowe tabeli, a druga — umieszcza w tabeli posortowane dane. ZauwaĪ, Īe hiperáącza zawarte w tabeli wykorzystują dwie skáadowe elementów tablicy $kolumny. Skáadowymi tablicy $kolumny są tablice asocjacyjne o in- deksach sortowanie i etykieta: array( sortowanie = 2, etykieta = Nazwisko ) DziĊki te
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP. Praktyczne projekty
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ą: