Jednym ze sposobów tworzenia serwisu/portalu/itp jest oddzielenie części zajmującej się przetwarzaniem danych od części obrazującej wyniki przetwarzania. Pozwala to na łatwe rozdzielenie pracy pomiędzy kilka różnych osób, z których jedna może być odpowiedzialna za stylistykę, inna za opracowanie kodu html zgodnego z projektem graficznym, a jeszcze inna za sam skrypt php.

Dzięki temu rozdzieleniu każdy może zajmować się tylko swoim kawałkiem bez konieczności poznawania wszystkich zagadnień. Jednym z zadań systemu szablonów jest utworzenie „pomostu” pomiędzy osobą zajmującą się wyglądem serwisu (pliki określające wygląd poszczególnych fragmentów stron), a osobą odpowiedzialną za kod php (dane). Jednocześnie należy zauważyć, że jeden szablon może być wielokrotnie używany w różnych częściach serwisu. Dzięki temu ewentualne poprawianie błędnego kodu html sprowadzi się do edycji jednego pliku, a nie (przykładowo) kilkudziesięciu.

Poniższe informacje opierać się będą o szablony Fast.Template. W ostatnim punkcie przedstawione zostaną różnice pomiędzy tym systemem, a systemem Smarty. Przyjęte również zostało, że pliki określające wygląd serwisu będą miały rozszerzenie *.tpl (od template).

Zaczynamy

Na początku tworzymy prosty szablon, który pozwoli zorientować się jak będzie wyglądać tworzenie kolejnych części składowych części wizualizacyjnej serwisu. Powiedzmy, że będzie to tabelka.

plik: table.tpl

<table border="1"> 
<tr><td>{TRESC}</td></tr> 
</table> 

Po wyświetleniu w przeglądarce nie zobaczymy zbyt wiele, jedynie ramkę oraz tekst {TRESC}. Nie jest to zbyt wiele, ale daje spore możliwości, ponieważ element {TRESC} możemy zastąpić tekstem, lub możemy wstawić w jego miejsce dowolny inny szablon.

Uwaga! Zastępowany jest element o nazwie podanej jako wzorzec. Dlatego też {TrESc}, {TREsc}, {tresc} będą traktowane jako zupełnie różne obiekty.

Przykład (peudokod):

weź szablon table.tpl 
zastąp {TRESC} napisem "Tutaj będzie treść" 
wyświetl szablon 

Wygląda to prosto, tak samo jak implementacja w skrypcie php.

Klasa Fast.Template

Słowo klasa od razu nasuwa na myśl hasło – programowanie obiektowe. Na szczęście nie ma się czego obawiać, ponieważ nawet bez znajomości tego zagadnienia można posługiwać się szablonami. Wystarczy zapamiętać sposób posługiwania się tym skryptem.

plik: index.php

<? 
include( "class.Fast.Template.php" ) ; 
$tpl = new FastTemplate( "katalog_z_szablonami" ) ; 
$tpl->define( array( "nazwa_szablonu" => "nazwa_pliku" )) ; 
$tpl->assign( "nazwa_elementu", "wstawiany_tekst" ) ; 
$tpl->parse( "sztuczny_element", "nazwa_szablonu" ) ; 
$tpl->fastprint( "sztuczny_element" ) ; 
?> 

Na początku należy dołączyć plik (include), który zawiera klasę FastTemplate. Następnie tworzymy obiekt, który będzie odpowiedzialny za odbieranie danych i umieszczania ich w szablonie. Tutaj ważne jest, żeby podać prawidłową ścieżkę do katalogu, w którym zapisane są szablony. W kolejnym kroku definiujemy (define) listę szablonów, które zamierzamy używać. Jako parametr podajemy tablicę, w której kluczami są nazwy szablonów (przy wyświetlaniu i wprowadzaniu danych odwołujemy się właśnie do nich), a wartościami są nazwy plików umieszczonych w katalogu „katalog_z_szablonami”. Następnie przypisujemy (assign) elementowi „nazwa_elementu” (nie używamy nawiasów klamrowych w nazwie elementu) „wstawiany_tekst”. Na koniec przekazujemy (parse) zawartość szablonu „nazwa_szablonu” do zmiennej „sztuczny_element” i wyświetlamy (fastprint) tą zmienną.

Najlepiej sprawdzić jak to będzie wyglądać na rzeczywistym przykładzie. Mamy juz plik table.tpl i chcemy, żeby element {TRESC} został zastąpiony napisem „Tutaj będzie treść”. Uzyskamy to modyfikując plik index.php:

  
<? 
include( "class.Fast.Template.php" ) ; 
$tpl = new FastTemplate( "Szablony" ) ; 
$tpl->define( array( "tabelka" => "table.tpl" )) ; 
$tpl->assign( "TRESC", "Tutaj będzie treść" ) ; 
$tpl->parse( "sztuczny_element", "tabelka" ) ; 
$tpl->fastprint( "sztuczny_element" ) ; 
?> 

Zakładamy tutaj, że plik „table.tpl” znajduje się w katalogu „Szablony”.

Jeśli chcemy zastąpić więcej elementów, to zamiast linii:

  
$tpl->assign( "nazwa_elementu_1", "wstawiany_tekst_1" ) ; 
$tpl->assign( "nazwa_elementu_2", "wstawiany_tekst_2" ) ; 
// ... 
$tpl->assign( "nazwa_elementu_n", "wstawiany_tekst_n" ) ; 

możemy zastosować zapis:

  
$tablica = array( "nazwa_elementu_1" => "wstawiany_tekst_1", "nazwa_elementu_2" => "wstawiany_tekst_2", ..., "nazwa_elementu_n" => "wstawiany_tekst_n" ) ; 
$tpl->assign( $tablica ) ; 

Łączenie szablonów oraz wielokrotne wstawianie

Samo wstawianie tekstu w zadane miejsca w szablonie nie jest zbyt pasjonujące. Dlatego też zajmiemy się teraz łączeniem szablonów. Metoda ta polega na umieszczaniu treści jednego szablonu we wskazanym miejscu drugiego szablonu. Już w punkcie 3 pojawiła się stosowna linia zawierająca słowo „parse”. Dzięki temu rozkazowi jesteśmy w stanie połączyć ze sobą kilka szablonów.

Skasowane dane to nie zawsze tragedia - ściągnij program i odzyskaj dane

Utwórzmy plik img.tpl, który następnie wstawimy w miejsce „{TRESC}” w szablonie „table.tpl”:
plik: img.tpl

  <img src="{IMG_SRC}" alt="" /> 

W miejsce „{IMG_SRC}” wstawiony zostanie adres do obrazka
Zmodyfikujmy po raz kolejny plik „index.php”:

  
<? 
include( "class.Fast.Template.php" ) ; 
$tpl = new FastTemplate( "Szablony" ) ; 
$tpl->define( array( "tabelka" => "table.tpl", 
"obrazek" => "img.tpl"  )) ; 
$tpl->assign( "IMG_SRC", "obrazek.gif" ) ; 
$tpl->parse( "TRESC", "obrazek" ) ; 
$tpl->parse( "sztuczny_element", "tabelka" ) ; 
$tpl->fastprint( "sztuczny_element" ) ; 
?> 

Po umieszczeniu pliku „obrazek.gif” w tym samym katalogu co plik „index.php” w przeglądarce powinna się pojawić tabelka z jedną komórka, w której znajdować się będzie obrazek. Linia:

$tpl->parse( "TRESC", "obrazek" ) ; 

powoduje, że poprzednia zawartość pola „{TRESC}” zostaje skasowana i zastąpiona zawartością szablonu o nazwie „obrazek”. Kolejne wywołanie tak zapisanej linii spowoduje ponowne skasowanie wcześniejszej zawartości. Dlatego też w przypadku chęci wstawienia jeszcze jednego szablonu należy zmodyfikować linię wstawiającą zawartość szablonu. Wgrajmy jeszcze jeden obrazek, powiedzmy o nazwie „obrazek2.gif”, a następnie zmodyfikujmy plik „index.php”:

  
<? 
include( "class.Fast.Template.php" ) ; 
$tpl = new FastTemplate( "Szablony" ) ; 
$tpl->define( array( "tabelka" => "table.tpl", 
"obrazek" => "img.tpl"  )) ; 
// pierwsze wstawienie obrazka 
$tpl->assign( "IMG_SRC", "obrazek.gif" ) ; 
$tpl->parse( "TRESC", "obrazek" ) ; 

// drugie wstawienie obrazka 
$tpl->assign( "IMG_SRC", "obrazek2.gif" ) ; 
$tpl->parse( "TRESC", ".obrazek" ) ; 

$tpl->parse( "sztuczny_element", "tabelka" ) ; 
$tpl->fastprint( "sztuczny_element" ) ; 
?> 

Jak widzimy, pojawiło się kolejne przypisanie wartości do pola o nazwie „{IMG_SRC}” (tym razem wartość ta to „obrazek2.gif”). Pojawiło się też kolejne wywołanie parse. Jednakże w tym drugim wywołaniu pojawiła się kropka przy nazwie szablonu. Dzięki temu nastąpi „sklejenie” zawartości szablonu obrazek, a w kodzie otrzymamy:

  <img src="obrazek.gif" alt="" /><img src="obrazek2.gif" alt="" /> 

Oczywiście możemy łączyć ze sobą różne szablony.

Szablony i MySql

Łączenie wierszy zawierających dane z szablonami może być bardzo proste (należy zwrócić uwagę na to co się będzie wyświetlać, np. pokazywanie wszystkim haseł użytkowników nie jest bezpieczne). Na początku określamy co chcemy pokazać na stronie. Robimy to konstruując odpowiednie zapytanie sql, na przykład:

  
select nick, miasto, wypowiedzi, lat from userzy

następnie konstruujemy odpowiednią pętlę, która pobierze wyniki i je wyświetli:

  
// tutaj wykonanie zapytania i przypisanie wyniku do zmiennej $wynik 
while( $row = mysql_fetch_array( $wynik, MYSQL_ASSOC )) { 
  $tpl->assign( $row ) ; 
  $tpl->parse( "WIERSZ", ".wiersz_mysql" ) ; 
} 
$tpl->parse( "WYNIKI_", "wyniki" ) ; 
$tpl->fastprint( "WYNIKI_" ) ; 
// rozlaczenie z baza 

gdzie:
„wyniki” to szablon „wyniki.tpl” zawierający treść

  
<table> 
<tr><td>nick</td><td>miasto</td><td>wypowiedzi</td><td>lat</td></tr> 
{WIERSZ} 
</table> 

„wiersz_mysql” („wiersz_mysql.tpl”) składa się z jednej linii

  
<tr><td>{nick}</td><td>{miasto}</td><td>{wypowiedzi}</td><td>{lat}</td></tr> 

Różnice w systemach FastTemplate, a Smarty

Obydwa systemy mają za zadanie przyjąć dane, umieścić je w zadanych miejscach, a następnie wyświetlić na ekranie. Jednakże występują pomiędzy nimi różnice. Przykładowo FastTemplate posługuje się elementami {NAZWA}/{nazwa}, natomiast Smarty wymaga elementów pod postacią {$NAZWA}/{$nazwa}. Kolejną różnicą jest to, że Smarty dość często posługuje się mniejszą liczbą szablonów. Zamiast dwóch szablonów „wyniki.tpl” oraz „wiersz_mysql.tpl” można zastosować jeden, w którym będzie zawarty dodatkowy kod. Wymaga to jednak poznania składni tego dodatkowego kodu. Należy także zauważyć, że FastTemplate działa na zasadzie: pobierz, wstaw. Natomiast Smarty umożliwia przeprowadzenie dodatkowych operacji na wprowadzanym tekście (np. upper – do zamiany tekstu na drukowane litery, lub odwrotność do tej operacji czyli lower).

Więcej informacji na temat FastTemplate można znaleźć pod adresem: http://www.grafxsoftware.com/product.php?id=26. Natomiast o Smarty przeczytać można pod adresem http://www.smarty.net/

Mezzmo - filmy i muzyka z PC na TV i DLNA