Każdy kto programuje w PHP na pewno kiedyś się spotkał ze Smarty. Jest to system szablonów do PHP, który pomaga oddzielić PHP od HTML. Jednak o ile sam szablon jest prosty, a tyle operacje matematyczne itp już nie są taką sielanką i wielu dostarczają problemów.
Parę słów o Smarty
System szablonów Smarty jest bardzo pomocny dla webmastera. Poświęciłem mu osobny artykuł „Smarty – system szablonów dla PHP”, który na pewno będzie bardzo przydatny dla raczkujących w tym temacie.
Wielu webmasterów borykało się z bałaganem w plikach wynikającym z pomieszania HTML i PHP. Wszystko było wymieszane razem i kod był bardzo nie czytelny, a co za tym idzie, ciężko było się w nim połapać.
Na szczęście powstał system szablonów Smarty, dzięki któremu można HTML zamknąć w odrębnych plikach, co pozwala uporządkować cały kod. Takie rozwiązanie jest niezbędne, kiedy nad projektem pracuje np grafik i programista.
Programista pracuje w PHP, a grafik grzebie w HTML-u zawartym w szablonach Smarty. Dzięki temu nikt sobie nie przeszkadza. Nie ma mowy o tym, by jeden nadpisywał pliki drugiemu. Tak w ogóle, wyobrażacie sobie, żeby grafik w plikach PHP szukał HTML-a?
Kolejnym przykładem użycia Smarty są skórki dla strony. Wyobraźcie sobie serwis, który macie napisać, a który ma obsługiwać różne skórki. Dzięki Smarty możemy każdą skórkę umieścić w innym katalogu i nie martwić się, że coś nie będzie grało.
W plikach Smarty jest tylko HTML i specjalne interpretowane instrukcje, zamykane w nawiasach klamrowych, dzięki którym Smarty komunikuje się z PHP, żeby pobrać dane, wykonuje pętle, warunki, różne operacje itp itd.
Jeśli ktoś nie czuje się na siłach i nie zna dobrze Smarty, to dzięki specjalnemu tagowi może nawet wykonywać kod PHP:
{php} echo 'ala ma kota'; {/php}
Przypisywanie wartości zmiennym Smarty
Zmienne w Smarty działają za zasadzie definiowania ich przed wywołaniem konkretnego szablonu zawierającego HTML. Zmienne przypisujemy za pomocą metody assign:
$smarty->assign('nazwaZmiennej', 'wartoscZmiennej');
Przypisane zmienne są trzymane we właściwości _tpl_vars, dzięki czemu można się do nich spokojnie dobierać z poziomu PHP:
$smarty->_tpl_vars['nazwaZmiennej']*=20;
Zmienne powinno się przypisywać przez metodę o której napisałem wcześniej. Jest to najszybsza i najłatwiejsza metoda.
Zmienne można przypisywać również w samych szablonach. Na takiej instrukcji właśnie przypisywania opierają się wszystkie operacje w Smarty:
{assign var=nazwaZmiennej value="jakaś wartość"}
Operacje matematyczne w Smarty
Operacje matematyczne w Smarty są jednym z przykładów takich operacji. Dodatkowo można również wykonywać operacje na stringach itp.
Bardzo dobrym przykładem takich operacji matematycznych jest koszyk w sklepie. W koszyku jest wiele artykułów, które nie raz są kupowane w większej ilości. Przed wypluciem strony do przeglądarki, musimy policzyć, ile artykułów i sztuk danego artykułu zamówił klient, jaką formę przesyłki wybrał itp.
Podliczenie tych rzeczy powinno się pokazać przy wypisywaniu zawartości koszyka. Podstawą w koszykach jest wyliczanie ceny towarów, na podstawie której będzie wyliczony koszt przesyłki, a w późniejszym czasie również podatek dochodowy VAT.
{assign var=sztukaVat value=`$sztukaNetto*$podatekVat/100`} {assign var=sztukaBrutto value=`$sztukaNetto+$sztukaVat`}
Na pewno zauważyliście, że w poprzednim przykładzie użyłem cudzysłowów, a w tym kopniętych apostrofów. Zrobiłem tak ponieważ w cudzysłowach przypisujemy zmiennej nową zawartość w postaci Stringa (lub innego typu danych), natomiast w kopniętych apostrofach wpisujemy instrukcje, które ma wykonać Smarty.
Mówiąc po ludzku, to co będzie w apostrofach i cudzysłowach, zostanie potraktowane jako String (bez podstawiania wartości zmiennych) i wypisane zamiast zamienione, czyli jeśli w powyższym przykładzie zamiast damy cudzydłowy lub apostrofy, to w zmiennej sztukaBrutto będziemy mieć Stringa „$sztukaNetto+$sztukaVat” zamiast wyliczonej wartości.
Operacje na stringach w Smarty
Operacje na stringach wykonuje się podobnie jak operacje matematyczne:
{assign var=imie value='Ala'}
Oprócz takiego przypisywania, możemy wykonywać skomplikowane operacje na stringach już przy wypisywaniu tekstu ze zmiennej:
<p> Cena brutto: {$cenaBrutto|regex_replace:'/^(\d+)$/':'$1,00'|regex_replace:'/^(\d+,\d)$/':'$10'} zł </p>
W powyższym przykładzie wpierw usunąłem wszystkie slashe, a następnie poddałem liczbę parsowaniu do formatu 99,99. Do parsowania wykorzystałem funkcję regex_replace, która jest w Smarty odpowiednikiem funkcji PHP preg_replace.
W szablonach Smarty przed funkcją stosuje się znak pionowej kreski (|).
Smarty potrafi również zliczać elementy tablicy:
<p> Ilość produktów w koszyku: {$produkty|@count} </p>
W szablonach Smarty jest zaimplementowanych o wiele więcej funkcji, głównie te najczęściej używane. Wszystkie są opisane na stronie Smarty oraz na forum Smarty. W następnym artykule postaram się opisać tworzenie własnych funkcji do Smarty.
Chyba wszystko jasno wyjaśniłem. Jeśli będziecie mieć jeszcze jakieś pytania, to piszcie w komentarzach.