Skomplikowane operacje w Smarty

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.

Twitter Obserwuj mnie na Blip.pl 

Dodaj komentarz

Twój komentarz

CommentLuv badge