Nadarzyła się okazja do nauki szablonów smarty na konkretnym przypadku. Przyszło mi zmienić wygląd i zawartość jednego z okienek pop-up aplikacji, którą się opiekuję. Idealna sytuacja do wprowadzenie w życie świeżo nabytych umiejętności. Okienko niewielkie, zawartość nieskomplikowana, więc szablon nie będzie zbyt rozbudowany. Jednakże poza podstawami o których była mowa w poprzednich odcinkach potrzebna będzie jeszcze znajomość instrukcji warunkowej. Dlaczego? No bo w zależności od tego jakie dane przygotuję ich prezentacja będzie się nieco zmieniać.
Po pierwsze to dane tabelaryczne, więc będzie jeszcze potrzebna umiejętność obsługi pętli, ale o tym będzie w następnym odcinku. Po drugie tabela może mieś różną liczbę kolumn (5,6 lub 7). Chciałoby się do szablony wstawić na stałe nagłówki, żeby ich nie przekazywać, w końcu mamy za zadanie odseparować php od HTML. Nie można więc stringu zawierającego wiersz nagłówka konstruować w php i przekazywać do szablonu jako parametr. Oczywiście z punktu widzenia możliwości technicznych daje się to zrobić, ale przeczy to zasadzie w myśl której postanowiłam nauczyć się szablonów, czyli powoduje, że php ciągle jest pomieszane z htm a związku z tym jest nieeleganckie.
Dość tych filozofii, przechodzimy do praktyki.
W szablonie tp1.tpl mamy taką oto tabelkę znajdującą się w sekcji BODY (dla przejrzystości nie pokazuję całego kodu):
<table> <tr id="naglowek"> <td>Lp</td> <td>Ksi±żka</td> <!--warunek na dodatkowe kolumny--> {if $liczba_pol == 7} <td>Od dnia</td> <td>Do dnia</td> {elseif $liczba_pol == 6} <td>Data publikacji</td> {else} <!--żadnych dat--> {/if} <td>Moduł</td> <td>Netto</td> <td>Branża</td> </tr> </table>
Jak widać powyższa tabelka składa się na razie tylko z jednego wiersza, wiersza nagłówków. Pięć komórek to część stała tej tabelki (jak już pisałam 5 to minimalna ilość kolumn). Między nimi znajduje się instrukcja warunkowa przyjmująca jako parametr znacznik $liczba_pol. W zależności od jego wartości dostawia jedną lub dwie kolumny, albo nie dostawia żadnej. I to cała tajemnica instrukcji warunkowych. Oczywiście instrukcję warunkową można stosować w najprostszym jej wariancie:
{if $liczba_pol == 7} wypisz ten tekst {/if}
jak również z dowolnie dużą ilością klauzuli {elseif warunek} z tym jednak zastrzeżeniem, że klauzule te muszą znajdować się wewnątrz bloku ograniczonego znacznikami {if} oraz {/if}. Oczywiście tak jak to jest w pozostałych językach klauzula wartości domyślnej {else} może się w danej sekcji pojawić tylko raz i także musi znaleźć się wewnątrz bloku instrukcji warunkowej. W szablonie smarty operatory porównania muszą być otoczone spacjami i w przeciwieństwie do języka php nie wolno używać operatorów identyczności === i nieidentyczności !==.
To tyle po stronie szablonu. Teraz ten szablon trzeba obsłużyć.
Nic prostszego. Trzeba tylko wywołać metodę assign tak jak to pokazywałam w poprzednich odcinkach:
$szablon->assign('liczba_pol',count($tablica[0]));
gdzie $tablica[0] to pierwszy wiersz wielowymiarowej tablicy, która będzie wstawiona do szablonu poniżej wiersza nagłówka. Ale o tym będzie już w następnym odcinku.