Pisanie funkcjonalnych stron internetowych wymaga stosowania kilku technologii. Najczęściej spotykane w sieci jest połączenie PHP, MySQL i XHTML. Jednak tworzenie aplikacji poprzez wzajemne przeplatanie składni tych języków jest równie częste. O ile tworzenie prostej strony dla siebie jest jeszcze zrozumiałe, to napisanie poważnego projektu webowego bez rozdzielenia wszystkich komponentów jest niemożliwe.
Smarty to obiektowa biblioteka służąca do tworzenia szablonów dla aplikacji PHP. Pozwala na oddzielenie logiki od warstwy prezentacyjnej, a tym samym łatwiejsze analizowanie i rozwijanie kodu. Szablony wykorzystują określone znaczniki, które przez silnik Smarty są zastępowane generowaną treścią.
Smarty umożliwia stosowanie struktur kontrolnych, a także wielu modyfikatorów. Wysoka wydajność pakietu została osiągnięta poprzez kompilowanie szablonów do skryptów PHP, a także wbudowanemu systemowi buforowania. Najnowsza wersja biblioteki dostępna jest na stronie Smarty.
Wstęp
Na początku musimy rozpakować paczkę i przegrać na serwer lub do katalogu na lokalnym komputerze. W naszym przypadku tworzymy plik example-01.php, w którym zapisujemy następujący kod.
<?php
require_once('../libs/Smarty.class.php');
$TPL = new Smarty;
$TPL -> template_dir = 'templates/';
$TPL -> compile_dir = 'templates_c/';
$TPL -> compile_check = true;
$TPL -> debugging = false;
$TPL -> caching = false;
$TPL -> use_sub_dirs = false;
?>
Powyższy fragment kodu dołącza plik Smarty.class.php, tworzy i ustawia odpowiednie parametry konfiguracyjne. Na początku wystarczy nam jedynie określenie położenia szablonów i szablonów skompilowanych, a w późniejszym czasie możemy dopisać bardziej szczegółowe ustawienia.
Wyświetlanie szablonu
Strona internetowa zapisana jako HTML/XHTML byłaby w dużym podobna do kodu przedstawionego poniżej. Jeśli korzystalibyśmy z PHP to pomiędzy znaczniki wpisalibyśmy wywołania funkcji echo
lub print
.
<html>
<head>
<title></title>
</head>
<body>
...
</body>
<html>
Jeżeli skorzystamy z systemu szablonów to w pliku sterującym wystarczy wywołać metodę display()
z parametrem.
$TPL -> display('example-01.tpl');
Widoczne jest, że ilość kodu jest większa, niż w przypadku gdybyśmy kod szablonu zapisali w samym pliku example-01.php. Jednak naszym celem jest rozdzielenie kodu i części prezentacyjnej, co osiągnęliśmy w prosty sposób.
Zmienne w szablonie
Wyświetlanie statycznych szablonów jest przydatne, ale nasze aplikacje generują głównie dynamiczną zawartość pobieraną z plików czy bazy danych. Smarty posiada możliwość przekazywania zmiennych do szablonu. Chcielibyśmy zmienić tytuł naszej strony, a także wyświetlić przykładowy tekst. Zmodyfikowana wersja szablonu przedstawia się następująco:
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>Example 1</h1>
<p>{$text}</p>
</body>
<html>
Z kolei w pliku sterującym dopisujemy dwie linijki, odpowiadające na przekazanie zmiennych do szablonu. Metoda assign()
przesyła zmienną PHP do szablonu.
$title = 'SMARTY - Template Engine';
$TPL -> assign('title', $title);
$TPL -> assign('text', 'Lorem ipsum dolor sit amet...');
$TPL -> display('example-01.tpl');
Sposób w jaki przekażemy argumenty metodzie assign()
zależy od nas. Może to być zwykły string lub inna zmienna zdefiniowana w pliku. Wartość przesyłanej zmiennej, którą można formatować wyświetli się w szablonie. Możemy korzystać z komentarzy, które zapisujemy przy pomocy {*
i *}
.
{* Komentarz w szablonie *}
Możliwe jest również wyświetlenie zmiennej z pliku konfiguracyjnego.
{#zmienna_konfiguracyjna#}
Możemy w końcu wywołać funkcje Smarty.
{funckja_smarty}
Możemy w końcu wywołać funkcje Smarty.
Modyfikatory
Zmienne przesyłane do szablonów można w różny sposób formatować. Przykładowy ciąg znaków możemy wyświetlić jako małe, duże litery czy kapitaliki. Przykładowa składania takiego modyfikatora przedstawia się następująco.
{$text|lower} {* string pisany małymi literami *}
{$text|upper} {* string pisany wielkimi literami *}
{$text|capitalize} {* string pisany kapitalikami *}
Możliwe jest również łączenie kilku modyfikatorów, celem osiągnięcia kilku złożonego formatowania. W tym przypadku tekst będzie wyświetlany wielkimi literami, a znaki załamania wiersza zostaną zastąpione przez <br />
.
{$text|upper|nl2br}
Pełna lista modyfikatorów oraz sposób ich działania znajduje się w tabeli poniżej.
Lp. | Modyfikator | Działanie |
---|---|---|
1 | capitalize | zamiana litery na kapitaliki |
2 | cat | złączanie napisów |
3 | count_characters | zliczanie znaków |
4 | count_paragraphs | zliczanie akapitów |
5 | count_sentences | zliczanie zdań |
6 | count_words | zlicznanie słów |
7 | date_format | formatowanie daty |
8 | default | wartość domyślna zmiennej |
9 | escape | cytowanie znaków specjalnych w napisie |
10 | indent | wcięcia akapitów |
11 | lower | zmiana liter na małe |
12 | nl2br | zamiana znaku załamania \n na <br /> |
13 | regex_replace | zamiana wyrażeń regularnych |
14 | replace | zamiana napisów |
15 | spacify | rozstrzelenie napisu |
16 | string_format | formatowanie napisu |
17 | strip | usuwanie białych znaków |
18 | strip tags | usuwanie znaków |
19 | truncate | skracanie długości napisu |
20 | upper | zamiana liter na wielkie |
21 | wordwrap | łamanie wierszy w napisie |
Możemy w końcu wywołać funkcje Smarty.
Tablice
Często do szablonów potrzebujemy przesyłać tablice zmiennych. Możliwe jest to dzięki znanej metodzie assign()
.
$arrBooks = array(
array('1', 'Standardy sieciowe', 'J.Zeldman'),
array('2', 'XHTML i CSS', 'Z.Kowalski'),
array('3', 'ABC Programowania', 'A.A.Atkinson'));
$TPL -> assign('arrBooks', $arrBooks);
Przeglądanie tablicy w szablonie umożliwia specjalna konstrukcja {section}
, która oznacza początek pętli. Koniec pętli przeglądającej tablicę oznacza {/section}
. Indeks kolejnych wierszy uzyskujemy poprzez [
i ]
.
<h1>Example 2</h1>
<table>
{section name=n loop=$arrBooks}
<tr>
<td>{$arrBooks[n].0}</td>
<td>{$arrBooks[n].1}</td>
<td>{$arrBooks[n].2}</td>
</tr>
{/section}
</table>
Sekcja może posiadać opcjonalny fragment {sectionelse}
. Wówczas treść szablonu umieszczona pomiędzy znacznikami {sectionelse}
oraz {/section}
będzie zawarta w stronie wynikowej wówczas, gdy żaden spośród elementów tablicy nie zostanie przetworzony przez iterację.
Podsumowanie
Smarty to bardzo wydajny system. Pętle przetwarzające tablice oraz modyfikatory zmiennych pozwalają całkowicie odseparować logikę od części prezentacyjnej. W plikach php nie stosowaliśmy znaczników HTML.
System pozwala na warunkowe przetwarzanie szablonów, a także stosowanie innych użytecznych funkcji. Możliwe jest również napisanie własnej i dołączenie jej do silnika. Kolejne przykłady zastosowania przedstawię w następnym artykule dotyczącym szablonów.
2 odpowiedzi na “Szablony Smarty – część 1”
Bardzo fajny poradnik mie wiedziałem coto smarty a teraz już trochę wiem.
Podbijam temat, kiedy doczekamy się części 2 artykułu ?