You are on page 1of 27

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Smarty. Szablony
w aplikacjach PHP
Autorzy: H. Hayder, J. P. Maia, L. Gheorge
Tumaczenie: Radosaw Meryk (rozdz. 1, 2, 4 11),
Robert Polaski (rozdz. 3)
ISBN: 83-246-0647-5
Tytu oryginau: Smarty PHP Template
Programming and Applications
Format: B5, stron: 296

Wykorzystaj nowoczesne narzdzia w swoich projektach internetowych


Projektuj wasne szablony
Twrz aplikacje wielojzyczne
Popraw wydajno witryn internetowych
Wspczesne witryny WWW to nie tylko prezentacje podstawowych informacji
o firmach. W sieci mona znale setki sklepw internetowych, portali informacyjnych
i innych serwisw bdcych samodzielnymi przedsiwziciami. Coraz czciej strony
WWW wykorzystywane s rwnie jako interfejs uytkownika dla aplikacji.
Tak rozbudowane projekty internetowe s realizowane przez zespoy skadajce si
z programistw odpowiedzialnych za zaplecze serwisu i projektantw, ktrych
zadaniem jest opracowanie wygldu witryny. W takich przypadkach niezbdny jest
mechanizm pozwalajcy na oddzielenie treci i logiki stron WWW od ich prezentacji.
Do tego celu stosowane s narzdzia umoliwiajce skonstruowanie warstwy
prezentacyjnej serwisu WWW w oparciu o szablony. PHP, jeden z najpopularniejszych
jzykw programowania wykorzystywany do tworzenia witryn i aplikacji internetowych,
oferuje mechanizm szablonw noszcy nazw Smarty.
Ksika Smarty. Szablony w aplikacjach PHP to kompletny przewodnik po tej
technologii. Zawiera zasady dziaania szablonw Smarty oraz moliwoci wykorzystania
ich w projektach internetowych. Czytajc j, dowiesz si, jak zainstalowa i skonfigurowa
Smarty, jak zbudowane s witryny oparte o ten system oraz jak kreowa wasne
szablony. Poznasz oferowane przez Smarty funkcje, metody i modyfikatory, ktre
bdziesz mg wykorzysta podczas budowy zoonych projektw. Przeczytasz
o buforowaniu, poprawie wydajnoci aplikacji, rozszerzeniu moliwoci Smarty za
pomoc wtyczek i tworzeniu aplikacji wielojzycznych.

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Instalacja i konfiguracja systemu Smarty


Struktura witryny opartej na szablonach Smarty
Narzdzia do projektowania szablonw
Tworzenie prostych szablonw
Korzystanie z modyfikatorw w szablonach
Funkcje w szablonach
Wykrywanie i usuwanie bdw
Buforowanie stron i optymalizacja wydajnoci witryn
Rozbudowywanie Smarty za pomoc wtyczek
Poznaj sposoby tworzenia profesjonalnych aplikacji sieciowych

O autorach

11

O recenzencie

13

Przedmowa

15

Rozdzia 1. Wprowadzenie do Smarty

19

Systemy szablonw
Po co stosuje si systemy szablonw?
Inteligencja technologii Smarty
Alternatywy dla technologii Smarty
Krtki przewodnik po procesie projektowania oprogramowania
Praca w zespole warstwy i podzia obszarw zainteresowa
Smarty podstawowy system obsugi szablonw dla jzyka PHP
Czy aplikacje z szablonami Smarty s szybkie?
Czy szablony Smarty s bezpieczne?
Gwne wasnoci technologii Smarty
Modyfikatory zmiennych
Funkcje szablonw
Debugowanie
Wtyczki
Filtry
Wntrze systemu Smarty
Instalacja i konfiguracja systemu Smarty
Krok 1. Zdobycie systemu Smarty
Krok 2. Konfigurowanie PHP w sposb umoliwiajcy odnalezienie bibliotek Smarty
Alternatywa kroku 2. Korzystanie z bibliotek Smarty w sytuacji,
kiedy nie mamy penego dostpu do systemu
Krok 3. Konfiguracja Smarty w aplikacji
Krok 4. Sprawdzenie poprawnoci instalacji
Wersja rozwojowa systemu Smarty w repozytorium CVS
Aktualizacja witryny korzystajcej z szablonw Smarty
Podsumowanie

19
20
21
22
23
24
26
26
27
28
28
29
29
29
30
31
32
32
33
34
35
35
35
37
37

Smarty. Szablony w aplikacjach PHP

Rozdzia 2. Architektura witryn Smarty


Rozdzia poj
Co to jest pojcie?
Perspektywa rozwizywania problemu
Pojcia przecinajce
Osoby biorce udzia w tworzeniu i utrzymywaniu witryny WWW
Rozpoczcie projektu Smarty
Struktura katalogw
Zabezpieczenia projektu Smarty
Warstwa dostpu do danych
Warstwa regu biznesu
Warstwa prezentacji
Wynik
Podsumowanie

39
40
40
41
41
42
43
43
44
44
47
48
50
52

Smarty dla projektantw


Rozdzia 3. Co projektanci wiedzie powinni?
Kopoty programistw czste scenariusze
Role projektanta szablonu i programisty
Definicje i pojcia dla projektantw
Pojcie komponentw wielokrotnego uycia
Podzia na komponenty
Jak tworzy szablony pozbawione tabel?
Podrczne, wbudowane znaczniki
Wybr edytora dla projektowania szablonw
Wsppraca z innymi projektantami
Podsumowanie

Rozdzia 4. Tworzenie szablonw


Zagadnienia projektowe od kodu HTML do TPL
Wprowadzenie do zmiennych Smarty
Przystpujemy do tworzenia szablonw
Tablice nieasocjacyjne
Tablice asocjacyjne
Przekazywanie tablic do szablonw Smarty i wykonywanie na nich operacji
Proste szablony
Warunki logiczne
Ptle
Szablony w praktyce
Kalendarz
Raport z bazy danych
Formularze do wprowadzania danych
Biuletyn przesyany poczt elektroniczn
Uruchamianie kodu PHP wewntrz szablonw
Podsumowanie

53
53
54
55
57
59
61
64
65
66
67

69
69
73
75
75
75
76
78
78
80
84
84
87
91
95
98
99

Spis treci

Rozdzia 5. Szablony zaawansowane


Smarty od rodka
Etapy kompilacji
Filtry wstpne i kocowe
Czym s modyfikatory Smarty?
Zaawansowane zastosowania technologii Smarty
Arkusz ocen uczniw
Galeria zdj
Dostpne modyfikatory
capitalize
count_characters
cat
count_paragraphs
count_sentences
count_words
date_format
default
escape
indent
lower
upper
nl2br
regex_replace
replace
spacify
string_format
strip
strip_tags
truncate
wordwrap
czenie modyfikatorw
Pliki konfiguracyjne
Podsumowanie

Rozdzia 6. Funkcje Smarty


Typy funkcji Smarty
Funkcje w praktyce
Operacja wielokrotne wykorzystywanie elementw strony za pomoc funkcji include
Objanienie
Umieszczanie elementw dynamicznych
Przekazywanie zmiennych do wczanych szablonw
Zapisywanie zmiennych w plikach konfiguracyjnych
Tworzenie sekcji pliku konfiguracyjnego dla kadej ze stron
Obsuga list w szablonach
Usuwanie nadmiarowych spacji z szablonw
Obsuga kodu JavaScript w szablonach
Przetwarzanie zagniedonych tablic

101
101
103
104
104
104
104
108
111
111
111
112
113
113
113
114
116
117
118
118
118
119
120
120
121
121
122
123
123
124
125
125
127

129
129
130
132
133
133
135
137
138
140
143
144
146

Smarty. Szablony w aplikacjach PHP

Cykliczne przetwarzanie listy wartoci


Przeciwdziaanie automatom spamowym indeksujcym witryny WWW
Funkcje obsugi formularzy
Wicej funkcji obsugi formularzy
Podsumowanie

Rozdzia 7. Debugowanie dla projektantw


Debugowanie szablonw Smarty
Bdy semantyczne
Czste bdy w szablonach Smarty
Inne czsto popeniane bdy w szablonach Smarty
Konsola debugowania
Podsumowanie

150
151
152
155
157

159
159
161
163
170
171
172

Smarty dla programistw


Rozdzia 8. Wbudowane zmienne i metody systemu Smarty
Wbudowane zmienne systemu Smarty
$template_dir
$compile_dir
$config_dir
$plugins_dir
$debugging
$error_reporting
$debug_tpl
$debugging_ctrl
$compile_check
$force_compile
$caching
$cache_dir
$cache_lifetime
$cache_modified_check
$php_handling
$security
$secure_dir
$security_settings
$trusted_dir
$left_delimiter
$right_delimiter
$request_vars_order
$request_use_auto_globals
$compile_id
$use_sub_dirs
$default_modifiers
$default_resource_type
$cache_handler_func

173
175
175
175
175
176
176
176
176
176
177
177
177
177
178
178
178
178
179
179
179
180
180
180
180
180
180
181
181
181

Spis treci

$autoload_filters
$config_overwrite
$config_booleanize
$config_read_hidden
$config_fix_newlines
$default_template_handler_func
$compiler_file
$compiler_class
$config_class
Podrczna tabela wbudowanych zmiennych systemu Smarty
Wbudowane metody Smarty
assign
assign_by_ref
Przykad dziaanie metod assign i assign_by_ref
append
append_by_ref
clear_assign
register_function
unregister_function
register_object
unregister_object
register_block
unregister_block
register_compiler_function
unregister_compiler_function
register_modifier
unregister_modifier
register_resource
unregister_resource
register_prefilter
unregister_prefilter
register_postfilter
unregister_postfiIter
register_outputfilter
unregister_outputfilter
load_filter
clear_cache
clear_all_cache
is_cached
clear_all_assign
clear_compiled_tpl
template_exists
get_template_vars
get_config_vars
trigger_error
display

181
181
182
182
182
182
182
182
182
183
187
187
187
188
190
191
191
192
192
193
193
193
194
194
195
195
195
195
196
196
196
197
197
197
198
198
198
199
199
199
199
200
200
200
200
201

Smarty. Szablony w aplikacjach PHP

fetch
config_load
get_registered_object
clear_config
Podsumowanie

Rozdzia 9. Buforowanie i wydajno


Buforowanie w systemie Smarty
Dynamiczne buforowanie czci szablonw
Czyszczenie bufora
Zaawansowane moliwoci buforowania
Zastosowanie grup buforw
Czyszczenie grup buforw
Blokowanie buforowania
Tworzenie wasnej procedury obsugi buforowania
Optymalizacja aplikacji Smarty
Profilowanie kodu PHP
Projektowanie witryn zapewniajcych skuteczne buforowanie
Nagwki Last-Modified i ETag
Nagwek Expires
Nagwek Cache-Control
Narzdzie ApacheBench (ab)
Narzdzie Xdebug
Narzdzie WinCacheGrind
Podsumowanie

Rozdzia 10. Rozszerzanie systemu Smarty za pomoc wtyczek


Wyszukiwanie i instalacja wtyczek
Przydatne wtyczki
Listy HTML
Formatowanie rozmiaru pliku
Podwietlanie sw kluczowych w stylu Google
Pisanie wasnych wtyczek
Typy wtyczek
Funkcje
Modyfikatory
Funkcje blokowe
Funkcje kompilatora
Filtry wstpne, kocowe i wynikowe
Zasoby
Wstawki
Rejestracja wtyczek
Przykadowa wtyczka kalendarz
Przykadowa wtyczka automatyczne cza
Podsumowanie

201
201
201
202
202

203
204
206
206
208
209
209
210
214
220
221
222
223
225
225
226
227
228
229

231
232
232
232
234
236
239
240
240
241
241
241
241
241
242
243
245
248
250

Spis treci

Rozdzia 11. Filtry


Filtry wstpne
Filtry kocowe
Filtry wynikowe
Tworzenie filtrw
Rejestracja filtru w fazie wykonywania aplikacji
Rczne zaadowanie filtra
Automatyczne adowanie filtrw
Filtr #1 usuwanie komentarzy HTML
Filtr #2 mierzenie wydajnoci aplikacji
Filtr #3 kompresja wyniku za pomoc gzip
Filtr #4 wyrnianie wyszukiwanych sw kluczowych
Podsumowanie

Rozdzia 12. Tworzenie aplikacji wielojzycznych


Infrastruktura tumaczenia Gettext
Konfiguracja rozszerzenia Gettext w PHP
Prosty przykad w PHP
Konfiguracja plikw Gettext
Zastosowanie rozszerzenia Gettext wraz z systemem Smarty
Generowanie plikw PO
Zaawansowane wasnoci pakietu Smarty Gettext
Podsumowanie

Skorowidz

251
251
252
252
252
253
254
255
256
259
262
263
266

267
268
268
269
270
273
276
280
282

283

Wspczesne witryny WWW daleko wykraczaj poza poziom prezentacji sumarycznych danych i informacji kontaktowych dla firm i projektw. Internet przeszed ewolucj, w wyniku
ktrej wikszo wspczesnych witryn to samodzielne przedsiwzicia, a nie prezentacje firm.
Co wicej, projektanci zoonych aplikacji zaczli wykorzystywa witryny WWW jako interfejs
dla swoich programw.
Od ponad dziesiciu lat PHP jako najbardziej kompletny jzyk programowania aplikacji WWW
o otwartym kodzie jest jedn z najlepszych technologii tworzenia witryn w internecie. Wraz
ze wzrostem zoonoci aplikacji PHP pojawi si nowy problem w jaki sposb oddzieli kod
pisany przez programistw (PHP) od kodu pisanego przez projektantw witryn (HTML) lub,
posugujc si bardziej precyzyjnymi sformuowaniami, jak oddzieli tre od jej prezentacji.
Technologi Smarty system szablonw dla jzyka PHP opracowano po to, by rozwiza
ten problem.

Podstawowa rola systemu szablonw polega na znalezieniu sposobu oddzielenia prezentacji


od treci przy niewielkiej interakcji pomidzy programistami a projektantami. Jako przykad
przeanalizujmy witryn WWW o ukadzie pokazanym na rysunku 1.1.

Smarty. Szablony w aplikacjach PHP

Rysunek 1.1. Przykadowy ukad witryny WWW

Projektanci tworz wizerunek witryny WWW, wprowadzajc ilustracje, style tekstu, tabelki itp.
Tworz szablony pokazujce, w jaki sposb bdzie prezentowana tre na stronie.
Jedyn informacj, jakiej potrzebuj projektanci, jest to, w jaki sposb powinna wyglda witryna
oraz czy tre powinna by zaprezentowana w postaci aktualnoci, opisu produktu, artw itp.
Z kolei programici tworz kod aplikacji, ktrego zadaniem jest przetwarzanie wystpujcych
w niej danych (reguy biznesowe). Nie interesuje ich to, jak witryna WWW wyglda (kolory,
ilustracje, style tekstu) lub jaki jest ukad treci na stronie. Programici musz jedynie przekaza tre do szablonw, posugujc si nazwami zmiennych uzgodnionymi z projektantami.
Z grubsza w ten sposb dziaa system szablonw. Oprcz tej podstawowej funkcji kady system
szablonw zawiera zbir wasnoci funkcjonalnych, ktre jeli s dobrze udokumentowane,
uatwiaj posugiwanie si systemem przez projektantw i programistw.
Celem niniejszej ksiki jest pokazanie optymalnego sposobu wykorzystania wszystkich wasnoci technologii Smarty.

Po co stosuje si systemy szablonw?


Tworzenie witryny WWW przypomina tworzenie oprogramowania. Mona przystpi do pracy
natychmiast po prostu zacz pisa kod, a wszystkie problemy rozwizywa po drodze
w takim przypadku efekt kocowy bdzie trudny do przewidzenia. Mona te wyrni komponenty projektu, podzieli je na warstwy i stworzy witryn WWW, biorc je pod uwag. Drugie
z podej okrela si terminem oprogramowania o architekturze wielowarstwowej lub wielopoziomowej. W przypadku prostych witryn WWW, skadajcych si z zaledwie kilku linijek
kodu PHP, mona zastosowa podejcie pierwsze. Wystarczy utworzy kilka tabel w bazie danych
i napisa kod w PHP: utworzy kilka banerw, wygenerowa kilka tabelek i sprbowa go
uruchomi po kadym etapie. Ta metoda ma wielu zwolennikw jest szybka i atwa.

20

Rozdzia 1. Wprowadzenie do Smarty

W przypadku bardziej zoonych projektw internetowych, takich jak portale, witryny e-commerce, systemy ERP itp. rwnie mona zastosowa pierwsz opcj, ale w wikszoci przypadkw, przystpujc od razu do kodowania, niewiele si osignie. Co wicej, biorc pod uwag
fakt, e na rynku jest bardzo wiele projektw internetowych, nasza witryna WWW bdzie miaa
szanse tylko wtedy, gdy bdzie miaa doskonay ukad, odpowiedni do tworzonego projektu,
oraz oczywicie stabilny kod, przetestowany we wszystkich moliwych sytuacjach. Dlatego wanie osoby zajmujce si tworzeniem witryn WWW specjalizuj si w tworzeniu doskonaego
ukadu witryn WWW (projektanci) albo w ich oprogramowywaniu (programici). Niezbyt
czsto spotyka si dobrych programistw witryn WWW tworzcych doskonae projekty lub
dobrych projektantw, ktrzy pisz dobry, wolny od bdw kod.
Firmy programistyczne zajmujce si tworzeniem witryn WWW, zazwyczaj maj wydzia
projektowy i wydzia programowania. Nad wikszoci rednich i duych projektw internetowych pracuj zarwno programici, jak i projektanci.
Programici stosuj bardzo rne sposoby kodowania aplikacji. Gdyby posugiwali si wycznie
jzykiem PHP, bez szablonw, projektanci musieliby zna wszystkie sposoby tworzenia kodu
stosowanego przez programistw, nazywania zmiennych itp. Z kolei programici musieliby
rozumie szablony projektantw i generowa kod PHP, ktry wywietla kod HTML w miejscu,
w ktrym ycz sobie tego projektanci.
Rozwamy nastpujcy przykad:
for ( $col = 1; $col < $i; $col++ ) {
print "<tr> <td> $procesid[$col]</td> <td>$data[$col] </td>
<td>$value[$col]</td> </tr>"; }

Jest to kod PHP wywietlajcy w tabelce wartoci trzech tablic. Nawet w przypadku tak prostego przykadu jak ten, ktry pokazano powyej, trudno rozmieci informacje na stronie WWW
dokadnie tak, jak oczekiwano.
W przypadku technologii Smarty kod PHP nie zawiera instrukcji print. Zamiast tego programista przekazaby te trzy tablice do projektanta poprzez przypisanie ich do szablonw
Smarty. Dalej to ju zmartwienie projektanta, ktry, nie przejmujc si kodem PHP, musi zadba o to, by tabelka dobrze wygldaa na stronie. Jest to jedna z wielkich zalet technologii
Smarty. W tej ksice dowiemy si, w jaki sposb j uzyskano.

Inteligencja technologii Smarty


Technologia Smarty umoliwia bardziej efektywn wspprac pomidzy programistami, a projektantami bez zagbiania si jednych w szczegy dziaalnoci drugich. Projektant tworzy
szablony stron WWW i pobiera dane ze skryptw PHP utworzonych przez programistw.
Programista przekazuje dane do szablonw, nie przejmujc si generowaniem kodu HTML.
Dziki temu wszyscy s zadowoleni i bardziej wydajni, poniewa robi to, w czym s dobrzy.

21

Smarty. Szablony w aplikacjach PHP

Przeanalizujmy przypadek witryny e-commerce zajmujcej si sprzeda laptopw. W bazie


danych i na stronie WWW powinny si znale takie dane jak nazwa producenta, numer modelu,
jego charakterystyka i cena.
Dziki zastosowaniu technologii Smarty praca projektanta, a take programisty, jest bardzo
prosta. Najwaniejsze zadania, ktre wykonuj, wymieniono poniej:
Zadania programisty:
Odczyta dane z bazy danych za pomoc prostego zapytania.
Sprawdzi poprawno danych i przetworzy je, stosujc reguy biznesowe.
Jeli jest taka potrzeba, zmodyfikowa metody dostpu do danych oraz
implementacj regu biznesowych bez ingerencji w prac projektanta. Na przykad
migracja systemu z bazy danych MySQL do PostgreSQL nie powinna wymaga
od projektanta adnych zmian.
Zadania projektanta:
Utworzy projekt HTML, ktry nie bdzie mia wpywu na kod PHP tworzony
przez programist. Jedynym zadaniem projektanta jest rozmieszczenie elementw
danych w miejscach uzgodnionych z programist.
Wprowadza zmiany w projekcie bez koniecznoci konsultacji z programist
i niewymagajce od niego wprowadzania zmian.
Przesta si martwi o techniczne modyfikacje w witrynie, ktre burz sposb,
w jaki jest ona prezentowana uytkownikom.
W pokazanym powyej przykadzie mona zauway, e zadania przydzielone osobom biorcym
udzia w projekcie dotycz czci, nad ktrymi te osoby pracuj prezentacji, regu biznesowych i dostpu do danych.
W dalszej czci rozdziau przeanalizujemy proces tworzenia aplikacji (w tym rwnie internetowych) z zastosowaniem architektury wielowarstwowej.

Alternatywy dla technologii Smarty


Dla wikszoci osb, ktrym jest potrzebny system obsugi szablonw w PHP, Smarty jest
naturalnym wyborem ze wzgldu na jego popularno. Jak atwo si domyli, Smarty nie jest
jedynym dostpnym na rynku mechanizmem obsugi szablonw dla jzyka PHP. Jest jednak
mechanizmem najbardziej kompletnym i niezawodnym.
Spord wielu innych mechanizmw obsugi szablonw dla jzyka PHP warto wymieni nastpujce:
PHP Savant: http://phpsavant.com/yawiki/,
PHPlib: http://phplib.sourceforge.net/,
Yats: http://yats.sourceforge.net/,

22

Rozdzia 1. Wprowadzenie do Smarty

FastTemplate: http://www.thewebmasters.net/php/FastTemplate.phtml,
SimpleTemplate: http://simplet.sourceforge.net/,
Yapter: http://yapter.sourceforge.net/,
patTemplate: http://www.php-tools.de/site.php?file=/patTemplate/overview.xml.

Wikszo z wymienionych systemw obsugi szablonw ma przewag nad technologi Smarty


polegajc gwnie na wikszej szybkoci dziaania i atwoci korzystania. Wynika to z faktu,
i systemy te nie s tak zoone jak Smarty. Smarty ma jednak znacznie wicej wasnoci od
wikszoci systemw konkurencji, a przy odpowiedniej konfiguracji zapewnia przyzwoit
szybko dziaania.
Moim zdaniem prawdziw konkurencj dla technologii Smarty jest PHP Savant, ktry jest
atwym w uyciu obiektowym systemem obsugi szablonw dla jzyka PHP o rozbudowanych
moliwociach. System Savant ma wiele wasnoci technologii Smarty.
Jest jednak jedna dua rnica pomidzy systemem Smarty i Savant, ktr w zalenoci od
punktu widzenia mona postrzega jako wielk zalet lub wielk wad systemu Savant. Rnica
ta polega na tym, e szablony w systemie Savant s napisane w PHP, a nie w innym jzyku,
tak jak w przypadku technologii Smarty. Wasno t mona uzna za:
Zalet systemu Savant projektanci pracuj z PHP jako jzykiem szablonw.
Nie musz uczy si innych jzykw.
Wad systemu Savant i wielk zalet systemu Smarty jeli chodzi o bezpieczestwo.
W systemie Savant szablony nie s kompilowane do PHP, poniewa same s
plikami PHP. Dziki temu projektanci maj dostp do penych moliwoci jzyka
PHP. Jeli nie ufamy projektantowi, zastosowanie systemu Savant nie wchodzi
w rachub. W takim przypadku lepiej stosowa technologi Smarty.
W wikszoci przypadkw ufanie projektantom w zakresie udzielenia im dostpu do systemu,
w ktrym dziaaj strony WWW, jest ryzykowne, dlatego Smarty jest w dalszym cigu najlepszym
systemem obsugi szablonw dla jzyka PHP. System Savant jest przyjemny, jednak jest niemal
cakowicie pozbawiony mechanizmw bezpieczestwa. Z kolei inne systemy obsugi szablonw
maj tylko niewielki zbir wasnoci funkcjonalnych dostpnych w systemie Smarty.

Proces tworzenia witryny internetowej obejmuje kilka czynnoci, ktre w rnych projektach
mog by rne, cho w wikszoci przypadkw s do siebie podobne.
Najpierw trzeba okreli potrzeby klienta, dla ktrego tworzymy baz danych. Potrzeby te naley
pniej uzgodni. Mona to zrobi ustnie, ale znacznie lepiej sporzdzi odpowiedni dokument. W takim dokumencie powinien znale si opis planowanych wasnoci funkcjonalnych

23

Smarty. Szablony w aplikacjach PHP

oprogramowania, a take definicje tabel bazy danych wraz z opisem poszczeglnych kolumn.
Po uzgodnieniu tego dokumentu z klientem oraz ewentualnym wprowadzeniu zmian mona
przystpi do waciwego procesu tworzenia witryny internetowej.
Jeli piszemy aplikacj sami dla siebie, nie musimy sporzdza wspomnianego wyej dokumentu. W pozostaych przypadkach gorco zalecam, aby to zrobi. W jednym z moich pierwszych projektw zaniedbaem etap jego tworzenia, co spowodowao, e projekt zakoczy si
cakowitym fiaskiem. Klient chcia coraz wicej funkcji, za ktre nie chcia paci, a gdyby
istnia dokument, nie miaby innego wyjcia.
Nastpna czynno polega na utworzeniu i zaprezentowaniu klientowi kilku ekranw. To zadanie naley do projektanta. Powinien on wsplnie z klientem opracowa ukad witryny, ktry
spodoba si klientowi. Po uzgodnieniu projektu rozpoczyna si waciwy proces tworzenia
witryny WWW. Po zakoczeniu projektu, klient ma pewien czas na testowanie, w ktrym wprowadza si kilka modyfikacji i usuwa znalezione bdy. Na tym projekt si koczy.
Wszystko wyglda piknie w teorii, jednak w rzeczywistoci programici posuguj si takimi
jzykami jak PHP i SQL, natomiast projektanci HTML i CSS. W zwizku z tym pomidzy
nimi czsto wystpuj rnice.

Praca w zespole
warstwy i podzia obszarw zainteresowa
W przypadku, gdy istnieje zagroenie niepowodzeniem interakcji pomidzy ludmi, trzeba
jak najbardziej rozdzieli ich zadania. Mona to zrobi, stosujc architektur wielowarstwow
oprogramowania. Najczciej spotyka si architektur trjwarstwow. Nale do niej nastpujce
warstwy:
warstwa prezentacji,
warstwa regu biznesu,
warstwa dostpu do danych.
Rozdzielenie tych warstw na etapie projektowania aplikacji pozwala na osignicie szybkiego
tempa tworzenia aplikacji przy zachowaniu atwoci zarzdzania projektem.
Interakcje pomidzy warstwami w architekturze trjwarstwowej pokazano na rysunku 1.2.
Na samym dole, w warstwie dostpu do danych, znajduj si dane, ktre chcemy zaprezentowa uytkownikom, oraz sposoby ich uzyskiwania. Warstwa dostpu do danych moe si
skada z nastpujcych elementw:

24

Rozdzia 1. Wprowadzenie do Smarty

Rysunek 1.2. Trjwarstwowa architektura aplikacji

bazy danych (MySQL, PostgreSQL, MSSQL itp.) oraz jzyka SQL sucego
do wydobywania danych z bazy danych,
plikw, w ktrych s zapisane dane i funkcji w PHP (lub innych jzykach),
ktre przetwarzaj te pliki,
oprogramowania do zbierania danych (na przykad programu obsugi termometru
podczonego do portu rwnolegego).
Teraz, kiedy pobralimy dane, moemy je przetworzy w celu uzyskania wynikw do wywietlenia. Przetwarzanie danych i sprawdzanie ich poprawnoci odbywa si w warstwie regu
biznesu, ktra moe zawiera nastpujce elementy:
mechanizmy sprawdzania poprawnoci danych na podstawie obowizujcych regu
(na przykad wywietlanie tylko tych towarw, ktre s w magazynie),
przetwarzanie danych zgodnie z obowizujcymi reguami (na przykad rabaty,
wyprzedae itp.),
funkcje i formuy suce do obliczania takich danych, jak koszty wysyki itp.
Warstwa prezentacji to miejsce, w ktrym definiuje si ukad strony WWW sposb wywietlania danych z warstwy regu biznesu na stronie WWW. Wykonuje si to za pomoc nastpujcych mechanizmw:
szablonw stron WWW,
arkuszy stylw CSS,
ilustracji, banerw i menu.
Bez mechanizmu obsugi szablonw w warstwie prezentacji znalazby si kod HTML i PHP
tworzcy ukad strony byby to zarwno czysty HTML, jak HTML generowany za pomoc
kodu PHP. W takim przypadku nie mona mwi o dwch oddzielnych warstwach: prezentacji
i regu biznesu. W zwizku z tym, w przypadku zoonych projektw programistycznych
wsppraca projektantw z programistami byaby bardzo trudna. W tej sytuacji z pomoc
przychodzi technologia Smarty.

25

Smarty. Szablony w aplikacjach PHP

Teraz, kiedy zdecydowalimy, e uatwimy sobie ycie dziki zastosowaniu wielowarstwowej


architektury naszej witryny WWW, przyjrzymy si temu, co mona osign za pomoc technologii Smarty, a take temu, czego osign nie mona.
Smarty nie suy do oddzielania kodu HTML od PHP. Podstawowym celem tej technologii
jest natomiast oddzielenie logiki aplikacji od logiki jej prezentacji. Gdyby celem technologii
Smarty byo rozdzielenie kodu PHP od HTML, warstwa prezentacji nie zawieraaby adnej
logiki. Szablony Smarty mog jednak zawiera logik, o ile wykorzystuje si j wycznie do
celw prezentacji.
Cho moe to wyglda na zamanie sztywnych regu separacji pomidzy warstwami i zadaniami,
s ku temu wane powody praktyczne. Przeanalizujmy prosty przykad witryny e-commerce
z produktami wywietlanymi w czterech kolumnach:
Bez technologii Smarty: jeli w warstwie prezentacji nie ma zaszytej logiki,
wywietlenie produktw w czterech tablicach wymaga modyfikacji kodu regu
biznesu.
Z technologi Smarty: dziki logice zaszytej w szablonach programista jedynie
przekazuje produkty do szablonw w postaci pojedynczej tablicy, a projektant
rozmieszcza produkty na stronie tak, jak chce.
Szablony Smarty zapewniaj interfejs niemal do wszystkich elementw PHP, a zatem mona
wcza kod PHP w szablonach. Zaleca si jednak, aby kod PHP by umieszczany przede
wszystkim w warstwie regu biznesu. Na szczcie logika stosowana w szablonach Smarty
jest, oglnie rzecz biorc, znacznie prostsza ni w skryptach PHP. Dziki temu projektanci
nie musz wciela si w rol programistw tylko po to, by stworzy logik prezentacji w projektach Smarty.

Czy aplikacje z szablonami Smarty s szybkie?


Systemy obsugi szablonw wprowadzaj dodatkowy poziom przetwarzania do aplikacji, a zatem
mona przypuszcza, e aplikacje, w ktrych zastosowano technologi Smarty, bd dziaay
wolniej od ich odpowiednikw napisanych w czystym kodzie PHP. Oglnie rzecz biorc, wewntrz jzyka skryptowego (PHP) stosuje si nowy jzyk pseudoskryptowy (znaczniki mechanizmu obsugi szablonw).
Technologia Smarty jest niezwykle szybka dziki tzw. kompilacji szablonw. Oznacza to, e
szablony s odczytywane, na ich podstawie s tworzone skrypty PHP i doczane do aplikacji.
W ten sposb powstaje jeden skrypt PHP, ktry po skompilowaniu przez mechanizm obsugi
PHP dziaa do szybko. Sia tego procesu polega na tym, e szablony s przetwarzane tylko

26

Rozdzia 1. Wprowadzenie do Smarty

raz przez mechanizm Smarty, a ponownej kompilacji podlegaj jedynie te szablony, ktre zostan zmodyfikowane. System Smarty wykonuje to automatycznie. W efekcie mechanizm PHP
tworzy szybko dziaajc aplikacj, a dodatkowe koszty zwizane z zastosowaniem technologii
Smarty s nike.
Dodatkowo dobr wiadomoci dla osb szczeglnie zatroskanych wydajnoci witryny jest
fakt, i system Smarty posiada wbudowan obsug buforowania, ktra jeszcze bardziej przyspiesza aplikacj. W szczeglnoci dotyczy to witryn WWW z zawartoci, ktra nie zmienia
si zbyt czsto. W buforze mona umieci ca zawarto witryny WWW bd tylko jej cz
i okreli czas, przez jaki system Smarty bdzie utrzymywa zawarto strony w buforze. Proces
ten omwimy bardziej szczegowo w rozdziale 9.
Poniewa w wyniku kompilacji szablonw Smarty powstaj skrypty PHP, nie ma powodu, by
zaniecha stosowania technologii buforowania skryptw PHP takich jak PHP Accelerator lub
Zend Cache.
Mechanizmy PHP Accelerator oraz Zend Cache bez problemu obsuguj wyniki dziaania
systemu Smarty i bardzo dobrze buforuj skrypty PHP generowane przez Smarty. Z tego powodu, jeli wydajno aplikacji jest dla nas priorytetowa, powinnimy zastosowa jedno z wymienionych rozwiza buforowania w poczeniu z wbudowanym mechanizmem buforowania
systemu Smarty.

Czy szablony Smarty s bezpieczne?


A zatem doszlimy do wniosku, e technologia Smarty jest szybka. Warto si jeszcze przekona,
czy jest bezpieczna. Moim zdaniem bezpieczestwo witryny WWW jest najwaniejsz cech
kadej witryny internetowej.
Oglnie rzecz biorc, zastosowanie technologii Smarty nie zmienia poziomu bezpieczestwa
aplikacji PHP. Oznacza to, e zastosowanie szablonw Smarty nie zmniejsza poziomu bezpieczestwa aplikacji. Co wicej niektre wasnoci szablonw Smarty zwikszaj poziom bezpieczestwa aplikacji.
Kiedy zesp skadajcy si z projektantw i programistw tworzy aplikacj bez uycia technologii Smarty, projektanci maj dostp do aplikacji i mog modyfikowa wszystkie skrypty
PHP. Nie jest to sytuacja dobra z punktu widzenia bezpieczestwa, poniewa projektant o zych
zamiarach, majc do dyspozycji wszystkie moliwoci jzyka PHP, atwo moe naruszy bezpieczestwo witryny.
Szablony Smarty maj wbudowane wasnoci zabezpiecze obsugujce sytuacje, w ktrych
szablony edytuj osoby, ktrym nie mona ufa. W przypadku zastosowania tych mechanizmw
projektanci, ktrzy modyfikuj szablony za porednictwem niezabezpieczonych pocze
(na przykad FTP), nie mog uzyska dostpu do systemu.

27

Smarty. Szablony w aplikacjach PHP

Wykorzystujc wasnoci zabezpiecze systemu Smarty, mona:


zezwala bd zabrania uywania kodu PHP w szablonach,
zezwala na wykorzystanie tylko podzbioru funkcji PHP jako modyfikatorw zmiennych,
definiowa foldery, z ktrych mona wcza szablony,
definiowa foldery, z ktrych szablony mog pobiera lokalne pliki.
Gorco zachcam do tego, aby podczas projektowania zawsze pamita o bezpieczestwie.
Zastanwmy si, co by si stao, gdyby aplikacja wykorzystywaa baz danych informacji dotyczcych kart kredytowych, a projektant wczyby na stronie WWW niezabezpieczony kod PHP?
Dla naszej firmy oznaczaoby to katastrof.

System Smarty oferuje narzdzia do optymalizacji pracy zarwno projektantom, jak i programistom. Podczas lektury tej ksiki poznamy wszystkie te doskonae wasnoci, co pozwoli nam
si przekona, jak doskonaym narzdziem jest Smarty. Sprbujmy dokona przegldu niektrych
spord tych wasnoci i przeanalizowa powody, dla ktrych naley je wykorzystywa, oraz te,
dla ktrych lepiej z nich zrezygnowa.

Modyfikatory zmiennych
Podczas wywietlania zawartoci w witrynie WWW niektre jej fragmenty mog si zmienia
w zalenoci od czasu przegldania witryny oraz tego, skd pochodzi odwiedzajcy. Na przykad,
w niektrych sytuacjach chcemy wywietla daty w rnych formatach. Jeli wykorzystamy
technologi Smarty, zastosowanie rnych formatw wywietlania daty nie wymaga interwencji
programisty. Wystarczy, jeli programista przekae do szablonu dat za pomoc odpowiedniej
zmiennej, a projektant bdzie mg j sformatowa tak, jak chce.
Projektant moe rwnie wywietli zmienn wielkimi bd maymi literami, obci blok tekstu,
wprowadzi spacje pomidzy znakami itp. Stosujc system Smarty, wszystko to mona uzyska
na etapie wywietlania strony.
Rozwamy sytuacj, w ktrej chcielibymy wywietli nazw kategorii produktw w postaci
niewielkiego tytuu pisanego wielkimi literami ze spacjami pomidzy znakami (na przykad
P O J A Z D Y). W bazie danych we waciwej kolumnie jest sowo pojazdy. W przypadku
uycia technologii Smarty nie trzeba prosi programisty o zmian tej nazwy na P O J A Z D Y.
Po przekazaniu zmiennej do szablonu mona j sformatowa za pomoc modyfikatorw zmiennych w fazie wywietlania. Co wicej, pniejsza modyfikacja sposobu wywietlania kategorii
produktw (na przykad do postaci Pojazdy), rwnie nie wymaga interwencji programisty.
Wicej informacji na temat modyfikatorw zmiennych mona znale w rozdziale 5.

28

Rozdzia 1. Wprowadzenie do Smarty

Funkcje szablonw
Analizujc skadni szablonw Smarty, odkryjemy inny doskonay element funkcje szablonw.
Rozwamy przypadek projektowania rozbudowanego formularza z wieloma rozwijanymi menu
HTML. Stary sposb polega na napisaniu znacznikw dla kadego menu rozwijanego. W przypadku zastosowania technologii Smarty wystarczy napisa funkcj dla rozwijanych menu i wywoa j za kadym razem, kiedy chcemy wywietli menu. Jest to sposb prostszy i szybszy.
To by tylko nieskomplikowany przykad, jednak dziki pisaniu funkcji wywietlajcych zawarto w sposb, ktry czsto powtarza si na stronie, mona zaoszczdzi duo czasu.
Wicej informacji na temat funkcji szablonw mona znale w rozdziale 6.

Debugowanie
Na kadym etapie tworzenia aplikacji, programici i projektanci musz wykona debugowanie
po to, by w atwy sposb poprawi swoj prac.
Zastanwmy si, ile czasu moemy straci, jeli popenimy literwk w nazwie zmiennej i nie
dysponujemy narzdziami do debugowania. Z mojego dowiadczenia w pracy w charakterze
programisty wynika, e jest to najgorszy scenariusz. Jeszcze gorszy od sytuacji, w ktrej popenia si bdy w algorytmie.
Chocia funkcja debugowania w czystym PHP jest dostpna, system Smarty jest wyposaony
w konsol debugowania umoliwiajc poprawianie bdw zwizanych z szablonami Smarty.
Jest to bardzo rozbudowane narzdzie, ktre dostarcza informacji o wszystkich wczonych
szablonach, przypisanych zmiennych oraz zmiennych pliku konfiguracyjnego dla biecego
szablonu.
Dziki zastosowaniu technologii Smarty mona zmodyfikowa format konsoli debugowania.
Pozwala to na wyrnienie elementw, ktre w debugowaniu s wane. Co wicej, korzystajc
z funkcji Smarty w szablonie, mona zrzuci zawarto konsoli debugowania na stron. Poniewa jednak funkcje Smarty wykonuj si w fazie dziaania aplikacji, mona zobaczy jedynie
uyte zmienne, a nie wczone szablony.
Wicej informacji na temat debugowania w systemie Smarty mona znale w rozdziale 7.

Wtyczki
Jedn z najistotniejszych wasnoci dla firmy zajmujcej si tworzeniem oprogramowania jest
moliwo wielokrotnego wykorzystywania kodu. W ten sposb mona zaoszczdzi czas i pienidze. Tworzc nowe projekty zawierajce wasnoci funkcjonalne zwizane z projektami
tworzonymi wczeniej, mona wykorzysta kod z poprzednich projektw. Wasno ta jest
jednym z czynnikw, ktre powoduj, e przedsibiorstwa programistyczne przynosz zyski.

29

Smarty. Szablony w aplikacjach PHP

Wykorzystywanie kodu z innych aplikacji za pomoc techniki kopiowania i wklejania wymaga


modyfikowania zmiennych, nazw funkcji, testowania oraz uwanej integracji z now aplikacj,
ale jest to sposb szybszy w porwnaniu z pisaniem kodu od pocztku.
Jest jednak lepsza metoda wielokrotnego wykorzystywania kodu wtyczki (ang. plug-ins).
Podczas tworzenia witryny warto wyodrbni wasnoci, ktre mona wykorzysta wielokrotnie nawet w tym samym projekcie i utworzy z nich wtyczki. W ten sposb, po utworzeniu
kilku witryn, bdziemy dysponowali zbiorem dobrze dziaajcych wtyczek, ktre mona wcza do nowych projektw bez adnych modyfikacji. To oczywicie pozwala na zaoszczdzenie mnstwa czasu i pracy. Aby mona byo skorzysta z tego sposobu, oprogramowanie wykorzystywane do tworzenia projektu musi obsugiwa wtyczki.
System Smarty posiada architektur wtyczek, ktr mona wykorzysta w celu dostosowania
systemu do indywidualnych potrzeb. W systemie Smarty mona napisa wtyczki dla funkcji,
funkcji kompilatora, funkcji blokowych, modyfikatorw, zasobw, operacji wstawiania, a take
filtrw wstpnych, kocowych i wynikowych.
Wiele programw wykorzystujcych architektur wtyczek aduje wszystkie wtyczki przed
kompilacj. Nie zawsze jest to ze, jednak projektanci systemu Smarty pamitali o wydajnoci
i zaprojektowali system w ten sposb, e wtyczki aduj si dopiero wtedy, gdy s wywoywane
w szablonie. Co wicej, wtyczka raz wywoana w szablonie aduje si w nim tylko raz. Nawet
wtedy, gdy wiksza liczba egzemplarzy szablonu Smarty da tej samej wtyczki.
Na przykad w aplikacji e-commerce mona utworzy wtyczk dla wasnoci koszyka na zakupy
lub filtrw konwersji waluty. Mona je pniej wykorzysta w innych projektach e-commerce.
Cho nie musimy pisa kodu jeszcze raz, moemy uzyska za niego podobn zapat.
Wicej informacji na temat wtyczek mona znale w rozdziale 10.

Filtry
Zdyscyplinowani projektanci pisz wiele komentarzy w swoich szablonach, co powoduje, e
pliki wynikowe po kompilacji maj du objto. Twrcy systemu Smarty pomyleli o tym
i stworzyli zbir filtrw pozwalajcych na rozwizanie tego problemu. W systemie Smarty s
dostpne filtry wstpne (ang. prefilters) s to funkcje PHP, ktre przetwarzaj szablony
Smarty przed ich skompilowaniem. Dziki filtrom wstpnym mona zmodyfikowa w szablonach
dowolne elementy jeszcze przed kompilacj szablonu. Na przykad, stosujc filtry wstpne,
mona z atwoci usun z szablonu wszystkie komentarze.
Jeli jednak chcemy wprowadzi jakie komentarze do skompilowanych szablonw, moemy
to zrobi, stosujc filtry kocowe (ang. postfilters). Filtry kocowe w systemie Smarty to funkcje
PHP, ktre przetwarzaj szablony Smarty po ich skompilowaniu.

30

Rozdzia 1. Wprowadzenie do Smarty

Zawarto szablonw mona rwnie filtrowa za pomoc filtrw wynikowych (ang. output
filters) funkcji PHP sucych do filtrowania wyniku szablonu w czasie jego dziaania. Dziki
temu mechanizmowi mona na przykad, zastpi zakazane sowa znakiem *, ukry adresy e-mail
itp. Dziki rozbudowanym filtrom programista ma pen kontrol nad szablonami.
Wicej informacji na temat filtrw wstpnych, kocowych i wynikowych mona znale
w rozdziale 11.

Z punktu widzenia projektantw Smarty jest nowym, prostym systemem skryptowym o rozbudowanych moliwociach, ktry mona uywa razem z HTML w celu usprawnienia pracy
z programistami. Nowy jzyk skryptowy, ktry system Smarty udostpnia projektantom, zapewnia sposoby uatwienia ich pracy.
Dobr ilustracj do wczeniejszego zdania jest nastpujcy fragment kodu:
<select name="Employee">
{HTML_options options=$names}
</select>

Pierwszy i ostatni wiersz jest napisany w jzyku HTML, natomiast wiersz rodkowy to Smarty.
Jego dziaanie polega na wybraniu wierszy z wartociami z tablicy $names otrzymanej od programisty. Dziki temu projektant musi jedynie poprosi programist, aby ten przekaza nazwiska pracownikw w tablicy $names (minimum interakcji). Zamiast wielokrotnego pisania
znacznikw <option></option> projektant wykorzystuje funkcj Smarty, ktra upraszcza
jego prac.
Zamiast umieszczania kodu pokazanego w powyszym przykadzie w pliku HTML projektant
umieszcza go w pliku z rozszerzeniem .tpl i przekazuje programicie pen nazw pliku z szablonem (.tpl).
Jedn z czci tej ksiki zatytuowano Smarty dla projektantw. Projektanci naucz si
z niej jzyka skryptowego wraz z przydatnymi przykadami, wskazwkami i sztuczkami zaczerpnitymi z dowiadcze autora.
Z punktu widzenia programisty Smarty jest rozbudowan klas PHP zawierajc zmienne
i metody. Nazwa klasy to Smarty, a zatem w celu przypisania zmiennej obiektu klasy Smarty
programista musi napisa nastpujcy kod:
$smarty = new Smarty;

31

Smarty. Szablony w aplikacjach PHP

Klasa Smarty zapewnia programistom lepszy sposb interakcji z projektantami. Zamy, na


przykad, e projektant poprosi o nazwiska wszystkich pracownikw w zmiennej $names. Po
wydobyciu nazwisk z bazy danych w postaci tablicy, programista przekazuje j do projektanta.
Mona to zrobi, wpisujc nastpujcy kod:
$smarty->assign('names', $names_array);

Dla programistw jedn z najwikszych zalet technologii Smarty jest brak koniecznoci umieszczania kodu HTML w skryptach PHP. Kod HTML znajduje si w plikach .tpl, ktre s wywietlane za pomoc metod klasy Smarty:
$smarty->display("index.tpl");

Drug cz tej ksiki zatytuowano Smarty dla programistw. Po jej przestudiowaniu programici zapoznaj si z klas Smarty oraz najlepszymi sposobami jej wykorzystywania.

System Smarty jest rozprowadzany zgodnie z licencj GNU Lesser General Public License,
ktra stanowi kontynuacj licencji GNU Library General Public License. Rnica pomidzy
now licencj Lesser GPL i star Library GPL polega na tym, e programy z licencj Lesser
GPL s w mniejszym stopniu chronione. Oznacza to, e biblioteki rozprowadzane zgodnie
z t licencj s darmowe i mona je wykorzysta do tworzenia oprogramowania komercyjnego.
Stara licencja Library GPL pozwala na wykorzystywanie oprogramowania rozprowadzanego
na jej prawach wycznie do tworzenia darmowego oprogramowania.
Istotne jest to, e Smarty jest narzdziem darmowym, ktre mona wykorzysta do tworzenia
oprogramowania komercyjnego bez koniecznoci wnoszenia opat.
Czytelnicy, ktrzy chc si przekona, czy postpuj w 100% zgodnie z prawem, powinni przeczyta ca licencj Lesser GPL dostpn pod adresem http://www.gnu.org/copyleft/lesser.html.

Krok 1. Zdobycie systemu Smarty


Najnowsz stabiln wersj kodu rdowego systemu Smarty mona pobra z witryny WWW
systemu Smarty pod adresem http://smarty.php.net/download.php. Zawsze naley pamita,
aby pobra najnowsz wersj systemu, poniewa zawiera ona poprawki bdw wszystkich
wersji wczeniejszych.
cile rzecz biorc, Smarty jest bibliotek PHP, a jej wymagania s bardzo proste: serwer
WWW z obsug PHP w wersji 4.0.6 lub nowszej. Jako serwer WWW mona wykorzysta
Apache, ze wzgldu na jego popularno, ale nie jest to jedyny moliwy wybr. Instrukcja instalacji serwera Apache jest dostpna pod adresem http://www.apache.org.

32

Rozdzia 1. Wprowadzenie do Smarty

Po pobraniu systemu Smarty z serwera i rozpakowaniu archiwum tworzy si folder z dystrybucj systemu Smarty. W gwnym folderze dystrybucji znajduje si folder libs zawierajcy
nastpujce pliki i foldery:
smarty.class.php,
smarty_Compiler.c1ass.php,
config_File.class.php,
debug.tpl,
\internals,
\p1ug-ins.
Wszystkie te pliki s wymagane do dziaania aplikacji Smarty. Skryptw PHP nie naley modyfikowa.

Krok 2. Konfigurowanie PHP


w sposb umoliwiajcy odnalezienie bibliotek Smarty
Metoda instalacji systemu Smarty jest prosta naley doda folder libs do cieki include
w pliku php.ini.

W systemie Windows
Oto bardzo prosta, a jednoczenie skuteczna metoda konfiguracji bibliotek Smarty: najpierw
naley utworzy folder, na przykad mycode w gwnym katalogu dokumentw instalacji serwera
Apache. Nastpnie trzeba skopiowa folder libs z dystrybucji Smarty do folderu mycode (na przykad c:\apache\htdocs\mycode\libs\).
Po wykonaniu tej czynnoci, naley wyedytowa plik php.ini i wprowadzi do niego zapis
include_path = ".;c:\apache\htdocs\mycode\libs\", gdzie c:\apache\htdocs\mycode\libs\
reprezentuje lokalizacj folderu libs.

W systemie Linux
Zamy, e dystrybucj Smarty pobran z internetu rozpakowalimy w katalogu /usr/local/Smarty.
Naley wyedytowa plik php.ini i wprowadzi do zapis include_path = ".:/usr/local/
Smarty/libs". To wszystko. Aby unikn edycji pliku php.ini, mona rwnie skopiowa folder
libs do dowolnej lokalizacji w ramach cieki include_path ustawionej w tym pliku.
Jest to najatwiejszy sposb instalacji bibliotek Smarty. W kadym skrypcie PHP, ktry ma korzysta z szablonw Smarty, naley zaadowa skrypt Smarty.class.php. Zatem jeeli plik ten
znajduje si w folderze cieki include jzyka PHP, utworzenie egzemplarza klasy Smarty
wymaga wprowadzenia nastpujcego kodu:

33

Smarty. Szablony w aplikacjach PHP

<?php
require('Smarty.class.php');
$smarty = new smarty;
?>

Po skonfigurowaniu rodowiska naley zmieni uprawnienia do folderu templates_c znajdujcego si w ciece skryptw. Oznacza to, e folder, w ktrym znajduje si kod, oraz templates_c
musz by zapisane w tym samym katalogu. Wykorzystujc FTP, mona zmieni uprawnienia
do folderu templates_c na 777 (rwxrwxrwx).
Operacj t mona wykona za pomoc nastpujcego polecenia powoki:
chmod -R 0777 templates_c

Alternatywa kroku 2. Korzystanie z bibliotek Smarty


w sytuacji, kiedy nie mamy penego dostpu do systemu
Jeli nie mamy uprawnie do modyfikacji pliku php.ini lub skopiowania katalogu libs biblioteki Smarty do jednego z folderw w ramach cieki include_path, w dalszym cigu moemy
uywa biblioteki Smarty. W tym celu wystarczy umieci katalog libs w katalogu, w ktrym
znajduj si skrypty wykorzystujce szablony Smarty.
System Smarty korzysta ze staej PHP o nazwie SMARTY_DIR, ktrej nie trzeba ustawia w przypadku korzystania z pierwszego sposobu instalacji polegajcego na edycji pliku php.ini. Mona
jednak rcznie ustawi sta SMARTY_DIR w taki sposb, aby wskazywaa na ten sam katalog,
w ktrym znajduje si katalog libs.
W systemie Windows:
<?php
define('SMARTY_DIR', 'C:\apache\htdocs\mycode\libs\);
require(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty;
?>

W systemie Linux:
<?php
define('SMARTY_DIR', '/usr/local/smarty/libs');
require(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty;
?>
W zwizku z wieloma moliwociami korzystania z technologii Smarty w niniejszej ksice przyjto zaoenie,
e folder libs skopiowano z gwnego katalogu dystrybucji systemu Smarty do folderu mycode w obrbie
gwnego katalogu dokumentw systemu Apache i dodano t lokalizacj do pliku php.ini. W przypadku systemu Linux dodatkowo zaoono, e uprawnienia do folderu templates_c ustawiono na 777 (rwxrwxrwx).

34

Rozdzia 1. Wprowadzenie do Smarty

Krok 3. Konfiguracja Smarty w aplikacji


Kiedy ju mamy pewno, e system odnajdzie plik Smarty.class.php, powinnimy skonfigurowa
foldery wykorzystywane w aplikacji. Kada aplikacja korzystajca z szablonw Smarty wymaga
czterech folderw, ktre domylnie maj nazwy templates, templates_c, configs oraz cache.
Kady z tych folderw definiuje si za pomoc waciwoci klasy Smarty: $template_dir, $compile_dir, $config_dir i $cache_dir. Kada aplikacja Smarty powinna uywa wasnych folderw.
W systemie Linux biblioteka Smarty wymaga uprawnie zapisu do katalogw $compile_dir
i $cache_dir, a zatem trzeba ustawi takie uprawnienia dla uytkownikw serwera WWW.
Naley otworzy plik httpd.conf (plik konfiguracyjny serwera Apache) i odczyta z niego
uytkownika i grup wykorzystywan do uruchomienia serwera. Zazwyczaj wykorzystuje si
uytkownika i grup nobody, zatem podobnie zrobi w moim przykadzie. Zamy, e gwny
katalog dokumentw serwera WWW to /www/htdocs. Aby udzieli uprawnie do zapisu
uytkownikowi nobody, trzeba ustawi uprawnienia do plikw /www/htdocs/templates_c
i /www/htdocs/cache.
chown
chown
chmod
chmod

nobody:nobody /www/htdocs/templates_c
nobody:nobody /www/htdocs/cache
770 /www/hdocs/templates_c
770 /www/htdocs/cache

Krok 4. Sprawdzenie poprawnoci instalacji


Aby si upewni, e instalacj wykonano prawidowo, naley skopiowa folder demo z dystrybucji
Smarty do gwnego katalogu dokumentw serwera WWW (na przykad c:\Apache2\htdocs),
sprawdzi, czy w pliku index.php jest instrukcja require('Smarty.class.php');, i wpisa
http://localhost/demo/index.php w polu adresu w przegldarce. Powinna wywietli si strona
demonstracyjna (rysunek 1.3) z informacjami o moliwociach biblioteki Smarty oraz konsol
debugowania. Naley pamita, aby w przegldarce wczy wywietlanie wyskakujcych okien.

Wersja rozwojowa systemu Smarty w repozytorium CVS


Jeli kto chce zapozna si z wasnociami systemu Smarty, ktre s przedmiotem pracy programistw i s planowane do wdroenia w przyszych wersjach systemu, moe pobra najnowsz wersj systemu (niestabiln) i wikszo poprzednich wyda z serwera CVS PHP.
System CVS mona pobra pod adresem http://ccvs.cvshome.org/servlets/projectDocumentList.
Aby pobra Smarty z serwera PHP CVS, najpierw naley zalogowa si na serwerze za pomoc
nastpujcego polecenia:
cvs -d :pserver:cvsread@cvs.php.net:/repository login

wykorzystujc cig phpfi jako haso.

35

Smarty. Szablony w aplikacjach PHP

Rysunek 1.3. Strona demonstracyjna systemu Smarty

Aby pobra biece drzewo CVS systemu Smarty, wystarczy wpisa:


cvs -d :pserver:cvsread@cvs.php.net:/repository co smarty

Mona rwnie pobra wskazan stabiln wersj systemu Smarty za pomoc nastpujcego
polecenia:
cvs -d :pserver:cvsread@cvs.php.nets/repository co -r smarty_X_Y_Z smarty

przy czym X_Y_Z oznacza numer wersji. Na przykad wpisanie smarty_2_6_10 w wierszu polecenia powyej spowoduje pobranie wersji 2.6.10 systemu Smarty do folderu smarty.
Uycie biecej dystrybucji systemu Smarty pobranej z serwera CVS PHP w aplikacjach produkcyjnych
nie jest zalecane. Jest to wersja niestabilna, nad ktr trwaj prace. Do tworzenia witryn WWW wykorzystywanych w praktyce naley uywa najnowszej stabilnej wersji systemu Smarty.

36

Rozdzia 1. Wprowadzenie do Smarty

System Smarty jest zgodny wstecz, a zatem jeli wystpi potrzeba aktualizacji witryny Smarty,
wystarczy wykona nastpujce czynnoci:
Pobra najnowsz dystrybucj systemu Smarty zgodnie z opisem zamieszczonym
w kroku 1.
Zastpi star zawarto folderu libs, w ktrym zainstalowano system Smarty,
zawartoci folderu libs z nowego gwnego katalogu dystrybucji.
Upewni si, e w adnym z katalogw wchodzcych w skad cieki include
interpretera PHP nie ma starego pliku Smarty.class.php.

Z rozdziau dowiedzielimy si, e stosowanie wielowarstwowej architektury oprogramowania


uatwia ycie. Celem stosowania systemu Smarty jest oddzielenie logiki warstwy regu biznesowych od logiki prezentacji. Smarty to system szybki i bezpieczny. Wynika to ze sposobu
przetwarzania szablonw kompilacji. W systemie Smarty wystpuj filtry wstpne, kocowe
i wynikowe, ktre gwarantuj programicie pen kontrol nad wynikami generowanymi przez
szablon i ich zawartoci. Utworzenie uchwytw do zasobw umoliwia korzystanie z szablonw
z dowolnego kodu rdowego, do ktrego jest dostp z PHP. System Smarty posiada architektur wtyczek, ktr mona wykorzysta w celu dostosowania systemu do indywidualnych potrzeb. Jest rwnie wyposaony w rozbudowane narzdzia debugowania. Z rozdziau dowiedzielimy si rwnie, w jaki sposb instaluje si bibliotek Smarty w systemach Windows i Linux.

37

You might also like