Szablony Smarty – część 1

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.

Przegląd modyfikaorów dostępny w szablonach Smarty
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 do “Szablony Smarty – część 1”

  1. Bardzo fajny poradnik mie wiedziałem coto smarty a teraz już trochę wiem.

  2. Podbijam temat, kiedy doczekamy się części 2 artykułu ?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *