Systemy szablonów

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

W niemal wszystkich większych aplikacjach internetowych stosuje się obecnie podział na warstwę logiki oraz warstwę prezentacji. Pierwsza z nich odpowiada za pobieranie oraz obróbkę danych, natomiast druga za ich wyświetlanie. Zadanie to realizuje się dzięki systemom szablonów.

Czym jest system szablonów?

Aby podzielić aplikację na warstwę logiki i prezentacji, musimy przenieść kod HTML oraz towarzyszące mu instrukcje osadzające dane ze skryptu do osobnych plików, które będziemy zwać dalej szablonami. System szablonów będzie wtedy biblioteką, która pośredniczy między obiema warstwami. Właściwy skrypt przekazuje dane do systemu szablonów oraz informuje, który szablon ma być odpowiedzialny za wyświetlenie, natomiast biblioteka odnajduje stosowny plik i wykonuje go. Powoduje to wygenerowanie wynikowego kodu HTML, który możemy wysłać użytkownikowi.

Istotne jest, że nie wnikamy szczegółowo w budowę szablonu. Istnieją dwa odmienne podejścia do tego zagadnienia, a każde z nich ma pewne wady i zalety:

  1. Szablony mogą być kolejnymi skryptami PHP odpowiedzialnymi za to, by odpowiednie zmienne były wyświetlone w odpowiednich miejscach.
  2. Szablony mogą być napisane w innym języku, niż PHP - w tym wypadku system szablonów musi też umieć go przetwarzać.

Systemy szablonów korzystające bezpośrednio z PHP są domyślnymi rozwiązaniami stosowanymi w najpopularniejszych frameworkach (Zend Framework, Symfony itd.).

Zastosowanie

Podział aplikacji na część logiczną i prezentacyjną niesie istotne korzyści:

  1. Ułatwia rozwój właściwego kodu aplikacji.
  2. Szablony mogą być opracowywane niezależnie od samej aplikacji, dzięki czemu można to zadanie zlecić innej części ekipy.
  3. Aplikacja może posiadać kilka zestawów szablonów, a przełączanie między nimi jest łatwiejsze.

Należy się liczyć z nieco mniejszą wydajnością niezbędną na załadowanie dodatkowych bibliotek oraz wczytywanie osobnych plików. Jednak przy obecnym stopniu modularyzacji frameworków system szablonów jest jednym z mniej wymagających elementów pod względem wydajnościowym.

PHP czy osobny język?

Niewątpliwą zaletą wykorzystania PHP jest zerowy czas nauki, gdyż korzystamy z już znanego narzędzia i możemy bezpośrednio używać wszystkich jego elementów dokładnie tak samo, jak w pozostałej części skryptu. Popularne frameworki dostarczają zestawy funkcji pomocniczych automatycznie generujących wiele kawałków kodu na podstawie zadanych argumentów (np. kontrolki formularzy). PHP stanowi jednak przeszkodę wszędzie tam, gdzie warstwą prezentacji nie zajmują się osoby będące dobrymi programistami, jeśli w ogóle. Ponadto ze względów bezpieczeństwa nie można go stosować, jeśli zamierzamy udostępnić internautom tworzenie własnych szablonów.

Wiele systemów szablonów podejmuje wyzwanie implementacji własnego języka, który na pewno sprawdza się tam, gdzie PHP stosowany być nie może, ale przy okazji może mieć prostszą składnię. Temat ten budzi ogromne kontrowersje wśród programistów i nietrudno spotkać się z całkowicie sprzecznymi ze sobą opiniami. Ponieważ warstwa prezentacji nie polega tylko na wstawianiu wartości zmiennych w kod HTML, język taki musi być wyposażony w szereg dodatkowych elementów tak, aby nie stanowił przeszkody przy próbie rozwiązania problemu bardziej złożonego, niż zwykłe wstawienie wartości zmiennej w kod HTML. Teoretycznie, tworząc nowy język, nie jesteśmy skrępowani (prawie) żadnymi ograniczeniami i wymaganiami PHP, dlatego można pokusić się o stworzenie języka, który będzie bardzo elegancko rozwiązywał wiele problemów, które w czystym PHP wymagają większego wysiłku lub nawet są prawie niemożliwe do rozwiązania w prosty sposób. Przełoży się to na efektywność pracy samych programistów, przenośność oraz awaryjność. Z drugiej strony, odpowiednie zaprojektowanie takiego języka nie jest prostym zadaniem i dlatego większość systemów szablonów ogranicza się do udostępnienia podzbioru PHP (pętle, instrukcja warunkowa) z paroma niedużymi usprawnieniami oraz inną składnią.

Odpowiedź na pytanie, w jakim języku pisać szablony, musisz postawić sobie sam. Każde z rozwiązań ma pewne wady i zalety.

Co wybrać?

W sieci znaleźć można wiele różnych systemów szablonów i ciągle powstają nowe. Poniżej przedstawiona została krótka charakterystyka aktualnie rozwijanych projektów.

Rozwiązania wbudowane we frameworki

Popularne frameworki dostarczają własne, niewielkie systemy szablonów, najczęściej oparte o język PHP, których największą zaletą jest pełna integracja z resztą projektu oraz obiektowa architektura, dostosowana do modelu MVC. Ponadto, mamy gwarancję, że wsparcie dla takiego systemu będzie istnieć tak długo, jak długo rozwijany będzie sam framework.

Smarty

Smarty jest od wielu lat najpopularniejszym niezależnym systemem szablonów. Szablony tworzone są w oparciu o autorski język, w którym wszystkie komendy i instrukcje zamykane są w nawiasach klamrowych. Niewątpliwą zaletą są ogromne zasoby poradników, artykułów, dodatków, a nawet książek. Przez ostatnie kilka lat ukazywały się jedynie wydania usuwające znalezione błędy, co gwarantuje wysoką stabilność, lecz równocześnie sprawia, że architektura projektu jest mocno przestarzała, a przez długi czas systemu bez ręcznych modyfikacji nie dało się nawet uruchomić na PHP 5. Dopiero niedawno ogłoszono, że trwają prace nad wersją 3.0, która ma przynieść pewne porządki w składni języka oraz unowocześnienie API. Sam język udostępnia prezede wszystkim typowe konstrukcje programistyczne, aczkolwiek posiada wiele niewielkich dodatkowych elementów ułatwiających pracę.

Strona internetowa projektu: www.smarty.net

Dwoo

Dwoo jest młodym projektem powstałym na skutek powolnego rozwoju systemu Smarty. Zachowuje z nim niemal kompletną kompatybilność składni języka, lecz posiada bardziej nowoczesne API oraz kilka udoskonaleń takich, jak dziedziczenie szablonów. Najnowszą wersją jest 1.0.1, która ukazała się pod koniec 2008 roku.

Strona internetowa projektu: dwoo.org

PHP-TAL

PHP-TAL jest implementacją w PHP języka Template Attribute Language stworzonego pierwotnie dla pythonowego projektu Zope, lecz później wykorzystanego z powodzeniem w wielu innych miejscach. W przeciwieństwie do poprzednich rozwiązań, TAL traktuje szablon jako plik XML, dlatego można już na etapie przetwarzania szablonów zweryfikować np. poprawność domknięcia znaczników. Sam język składa się z kilku elementów, które są osadzane w szablonie jako dodatkowe atrybuty znaczników.

Strona internetowa projektu: phptal.motion-twin.com

Open Power Template 2

OPT obsługuje szablony XML-owe i także weryfikuje poprawność również statycznego kodu HTML. Reprezentuje podejście deklaratywne, gdzie twórca szablonów może się skupić na tym, co chce osiągnąć, a nie - jak to zaimplementować. Dostarcza gotowych schematów rozwiązań do dużej grupy problemów związanych z warstwą prezentacji takich, jak obsługa formularzy czy generowanie list. Biblioteka posiada obiektowe API wzorowane mocno na rozwiązaniach spotykanych we frameworkach.

Strona internetowa projektu: libs.invenzzia.org