Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Smarty - Szablony w aplikacjach PHP #2

SPIS TREŚCI:Smarty - Szablony w aplikacjach PHP #1Smarty - Szablony w aplikacjach PHP #2

Kilka słów wstępu...

We wcześniejszym wpisie pisałem co nieco na temat Smartiego i naszkicowałem pewne podstawy, które należy znać, aby używać Smartiego.

Dzisiejszym tematem jest...

A dzisiaj postaram się kontynuować temat Smartiego i poruszyć najważniejsze funkcje do wykorzystywania w szablonach, metody klasy Smarty. W następnym 'odcinku' opiszę co to są i jak korzystać z modyfikatorów i jak debugować projekty w Smartim.

1. Przydatne funkcje ciąg dalszy!

1.1. Funkcja config_load – funkcja, która pomoże nam stworzyć statyczny szablon w wielu językach. Odpowiada ona za wczytanie pliku konfiguracyjnego, w którym możemy zapisać jaką walutą się posługuje użytkownik z danego kraju, przetłumaczyć statyczne elementy naszej strony, itp. Zamiast powielać szablonów i jeżeli nadejdzie jakaś zmiana nanosić ją we wszystkich wersjach językowych możemy skorzystać z pliku konfiguracyjnego, innego dla każdej z wersji językowych naszej strony.
Zobaczcie poniższy przykład. Warto zwrócić uwagę, na to iż jak mamy bardzo rozrośniętą stronę i nasz plik konfiguracyjny 'pęcznieje' dobrym nawykiem, aby nie ładować niepotrzebnych zmiennych do pamięci, będzie podzielenie pliku na sekcje (section).
Zapiszmy taki plik konfiguracyjny polski.cfg:#Plik konfiguracyjny #To jest komentarz i sekcja Index [Index] waluta = "ZŁ" tytul = "Witaj na naszej stronie!" tresc_komunikat = "Cieszymy się, że wpadłeś. Zapraszam do menu po prawej."Oraz stwórzmy plik index.php i index.tpl:<?php include_one('libs/Smarty.class.php'); $smarty = new Smarty(); $smarty->assign('jestem_tu', ' - '.$_SERVER['REQUEST_URI']); $smarty->assign('menu', $menu);//abstrakcja, trzeba stworzyć! $smarty->assign('jezyk' $_SESSION['lang'].'.cfg'); $smarty->displaty('index.tpl'); ?>{config_load file=$jezyk section="Index"} <html> <head> <title>{#tytul#}{if $jestem tu}{$jestem_tu}{/if}</title> </head> <body> {include file='header.tpl'} {* To jest komentarz w języku Smarty *} {* W menu wykorzystuje zmienną $menu, która zawiera menu pobrane z bazy *} {include file='menu.tpl'} <div> <p>{#tresc_komunikat#}</p> <p>Twoja waluta to {#waluta#}</p> </div> </body> </html> 1.2. Funkcja strip – funkcja służy do usuwania niepotrzebnych białych znaków. Jeżeli w naszym tekście jest więcej niż 1 spacja pod rząd, Smarty usunie te spacje bez potrzeby np. modyfikowania wpisu w bazie, skąd pobraliśmy treść do wyświetlenia.

1.3. Funkcja mailto – funkcja wyśmienicie nadaje się do publikowania publicznie maila na stronie. Zasada działania funkcji jest prosta. Koduje tak adres email, aby był wyświetlany poprawnie, a jednak bot, który przeszukuje naszą stronę w celu znalezienia maila do spamowania nie zainteresuje się naszym mailem, który dla niego będzie miał postać: %6f%6f%e8%d4… Smarty generuje w miejscu użycia funkcji mailto spreparowany link i do odkodowania używa javascript'owych funkcji takich jak eval i unescape. Przykład użycia mailto:Mail: {mailto adress="dingo@gmail.com" subject="Wiadomość ze strony dobreprogramy.pl" encode="javascript"}

1.4. Funkcja html_select_date – funkcja do wyświetlania wyboru daty. Naprawdę pomocna rzecz. Pozwala na wstawienie 'gotowca' do naszego kodu. Załóżmy, że potrzebujemy prostego wyboru daty do formularza w naszym panelu administratora, a nie chcemy się bawić w wyskakujący kalendarz w JS. Jedna funkcja i Smarty generuje nam wszystkie pola w postaci checkbox'ów. Pozwala na definiowanie co ma być wyświetlane (sam miesiąc, data z rokiem, itp.). Pełną listę wraz przykładem możecie znaleźć tutaj: http://www.smarty.net/docsv2/en/language.function.html.select.date.tplTwój miesiąc urodzenia: {html_select_date display_days=false display_years=false}

1.5. Funkcja html_select_time – funkcja do wyświetlania wyboru czasu. Kolejna przydatna rzecz. Przenieśmy się do panelu administratora serwisu i postawmy sobie za zadanie zmodyfikować czas utworzenia newsa. Nie będziemy przecież robić tego ręcznie zapytaniem czy przez jakiś manager bazy danych. Ponadto warto uprościć rozwijaną listę. Załóżmy, że nie potrzebujemy dokładnie określać w której sekundzie został dodany news. Wyświetlajmy tylko każdą kolejną dziesiątkę. Stwórzmy więc formułę taką jak niżej:Data modyfikacji: {html_select_date }{html_select_time second_interval=10}Przydatne właściwości można podglądnąć na stronie: http://www.smarty.net/docs/en/language.function.html.select.time.tpl

1.6. Funkcja html_radios – funkcja generuje nam 'okrągle' elementy do jednokrotnego wyboru – tak zwane radio buttons. Jako parametr podajemy tablice która posłuży Smartiemy do stworzenia całej listy elementów. Nie musimy się męczyć ich ich tworzyć. Możemy określić jak Smary ma rozdzielać poszczególne elementy oraz który element ma być zaznaczony. Oczywiście jest więcej atrybutów, które możecie użyć.

1.7. Funkcja html_checkbox – funkcja tworzy pola wyboru. Dane są przekazywane w postaci tablicy do tej funkcji, dzięki czemu możliwe jest tworzenie wielu pól za jednym razem.

2. Przydatne metody:2.1. Metoda assign – metoda ta służy do przekazywanie zmiennych do szablonów. Metoda przyjmuje jeden bądź dwa argumenty. Przykładowe użycie z dwoma argumentami, gdzie pierwszym była nazwa zmiennej w szablonie, a drugim przekazywana wartość, już widzieliśmy. Drugim sposobem przekazywania jest przekazanie tablicy asocjacyjnej, gdzie klucz odpowiada za nazwę zmiennej do wykorzystania w szablonie, a jako wartość podajemy przekazywaną wartość do szablonu. Poniżej zamieszam przykład, aby bardziej zobrazować to co staram się wam przekazać:$smarty->assign(array("menu" => $menu, "tytul" => 'Witaj na stronie db.pl'))

2.2. Metoda assign_by_ref – metoda ta ma identycznie działanie jak metoda assign, z tym że nie przekazujemy wartości, ale referencje do pamięci, gdzie nasze dane się znajdują. Trzeba pamiętać, że tak przesłana wartość podlega modyfikacji, jeżeli po wyświetleniu szablonu zamierzamy używać zmiennej dalej w naszym kodzie PHP.

2.3. Metoda append i append_by_ref – metoda łączy przesłane elementy w tablicy. Dla pokazania jak to działa, przekształcę przykład z manuala: <?php // To zadziała tak jak metoda assign $smarty->append('foo', 'Fred'); // Po wykonaniu tego kodu, zmienna foo będzie dostępna jako tablica z imieniem Fred i Albert. $smarty->append('foo', 'Albert'); $array = array(1 => 'one', 2 => 'two'); $smarty->append('X', $array); $array2 = array(3 => 'three', 4 => 'four'); // Poniższa linia doda array2 jako drugi element do listy X $smarty->append('X', $array2);?>

2.4. Metoda clear_assign – metoda czyści przesłane zmienne. Jako argument podajemy stringa z nazwą zmiennej, lub tablicę z kolejnymi nazwami zmiennych do usunięcia.

2.5. Metoda template_exists – metoda sprawdza czy podany szablon istnieje.

2.6. Metoda get_template_vars – metoda zwraca wszystkie zmienne przypisane do szablonu, lub konkretną zmienną, której klucz podajemy jako argument.

2.7. Metoda display – metoda ta odpowiada za wyświetlenie szablonu.

2.8. Metoda fetch – bliźniacza metoda to metody display. Znaczną różnicą jest to, iż metoda ta zwraca nam wynik działania naszego szablonu. Pierwszy parametr jest to string określający położenie szablonu, natomiast 2 argument, domyślnie ustawiony na false, po ustawieniu na true przekształca naszą metodę, aby zachowywała się identycznie jak metoda display.

2.9. Metoda config_load – działa identycznie jak funkcja config_load. Dzięki czemu nie musimy jej wykonywać w szablonie, tylko wywołamy metodę config_load w naszym pliku PHP.

Podsumowanie.

Niestety to już koniec na dziś. Zostało sporo do omówienia. Na prawdopodobnie w trakcie tygodnia powstanie część 2.5, w której omówię pozostałe ważne metody oraz zmienne globalne, które dają nam dostęp konfiguracji Smartiego.
Odsuwając na chwilę ten wpis muszę stwierdzić, że ostatnio wracam zmęczony i ochota na pisanie jest mniejsza, ale jak obiecałem będę pisał dalej i drążył ten temat. Nie spocznę jak nie skończę choć trochę omawiać wykorzystanie Smartiego!
Chciałbym jeszcze poprosić o zgłaszanie wszelkich błędów i negatywne/pozytywne komentarze oraz zachęcam do małej dyskusji w komentarzach.
Z racji chwilowego braku czasu, nie przeczytałem tych wypocin. Pozwólcie, że korektę przeprowadzę jutro :-). 

Komentarze

0 nowych
kwpolska   6 #1 26.07.2011 12:26

A teraz racz naprawić kod. Masz typograficzny cudzysłów.

dingo12   3 #2 26.07.2011 13:46

@kwpolska
Poprawiłem. Jeszcze przyjrzę się temu po południu.
W Wordzie pisałem...

GioWDS   14 #3 26.07.2011 16:58

Ogólnie nie jestem zwolennikiem Smarty - jest strasznie ciężki, a do potrzeb większości stron lepszym rozwiązaniem jest mała biblioteka z 'kompilowaniem' kodu do PHP.

dingo12   3 #4 26.07.2011 18:33

Przecież smarty kompiluje kod do PHP. Robi go zawsze (domyślnie) jak jest jakaś zmiana w szablonie. Mozna ustawić też, aby zawsze korzystał z wygenerowanego.

GioWDS   14 #5 26.07.2011 21:31

Wiem ;p Dlatego napisałem, że mała biblioteka - SMARTY to kolos którego 90% developerów nigdy nie użyje więcej niż w 20%.

dingo12   3 #6 26.07.2011 23:02

Potwierdzam. Z własnego doświadczenia wiem, że trzeba się zagłębić, aby to wykorzystać.
Taka prosta rzecz, jak przycinanie tekstu w rotatorze na głównej. Zamiast w smartim to zrobić, to ktoś sub_str użył. Po to jest funkcja w smartim, aby jej używać (i lepsza niż sub_str). Widać tam gdzie mam praktyki ktoś na siłę wrzucił smartiego, aby było jakieś ułatwienie dla projektantów. Jednak smarty ma więcej opcji niż tylko wyświetl. Cześć ludzi z tego korzysta a inni nie wiedzą że takie coś istnieje.

dingo12   3 #7 26.07.2011 23:02

Potwierdzam. Z własnego doświadczenia wiem, że trzeba się zagłębić, aby to wykorzystać.
Taka prosta rzecz, jak przycinanie tekstu w rotatorze na głównej. Zamiast w smartim to zrobić, to ktoś sub_str użył. Po to jest funkcja w smartim, aby jej używać (i lepsza niż sub_str). Widać tam gdzie mam praktyki ktoś na siłę wrzucił smartiego, aby było jakieś ułatwienie dla projektantów. Jednak smarty ma więcej opcji niż tylko wyświetl. Cześć ludzi z tego korzysta a inni nie wiedzą że takie coś istnieje.

  #8 27.07.2011 10:19

Smarty v2? Może jeszcze IE6? :P