FastTemplate jest systemem szablonów dla PHP. Kod PHP przeplatający się z tagami HTML jest nieczytelny, trudny w konserwacji i eksploatacji. System szablonów stanowi świetne wyjście z takiej sytuacji.
Pozwala oddzielić kod PHP od tagów HTML, poza Tagami szablonu.
Ogólnie przyjętym rozszeżeniem dla plikówz szablonem jest “.tpl” i tego najlepiej się trzymać, aby wiadomo było, o co chodzi. W pliku z szablonem (z rozszerzeniem .tpl) są zawarte tagi HTML wraz z tzw. tagami szablonu. Tgi szablonu zdefiniujesz sam przy tworzeniu klasy dla twojego szablonu. Tagi szablonu są zawarte w ogranicznikach, w tym artykule zastosuję nawiasy sześcienne jako ograniczniki “{” i “}”. Przykładowy plik z szablonem wyglądałby następująco:
<!–szablon.tpl–> <html> <head> <meta http-equiv=”Content-type” content=”text/html; charset={kodowanie}”> <title>{tytul}</title> </head> <body> Mam na imię: <b>{moje_imie}</b>.<br> Mam {moj_wiek} lat. </body> </html> |
Prawda, że czytelne… Tagi w takim dokumencie nazywa się też wzorcami. Gdy mamy jeż plik szablonu potrzebna jest teraz aplikacja, która będzie przetwarzała wzorce (Tagi Szablonu) stworzymy do tego odpowiednią klasę. Klasa powinna wczytywać plik ze wzorcami (szablon), powinna posiadać metodę, dzięki której będzie można inicjować zmienne wraz z wartościami, metodę, która będzie zastępowała wzorce odpowiednim kodem, oraz metodę, która wyświetli przetworzony szablon. Trzeba się jeszcze zastanowić, co jak będzie działać, klasa powinna na wejściu wczytywać plik szablonu. Każdy szablon będzie posiadał osobnym plik ze zdefiniowaną klasą i zawartym kodem dla tego szablonu, więc z tym nie będzie problemu. Powinien być do tego zdefiniowany konstruktor. Zamiana wzorców w pliku z szablonem może odbywać się na kilka sposobów, można zastosować funkcję str_replace() lub substr_replace(), jednak w przypadku podania większej ilości wzorców może się to okazać nie efektywne gdyż za każdym razem trzeba by sprawdzać szablon od nowa. Można podzielić szablon za pomocą funkcji explode() ustawionej na separator “{” a następnie jeszcze raz ustawionej na separator “}”, ale podobnie jak poprzednio przysporzyłoby to wiele kłopotów. Ostatnią możliwą metodą, której jednak bym również nie zalecał (bo są lepsze) jest zastosowanie ereg_replace lub eregi_replace, ale tutaj również trzeba się nagimnastykować. Według mnie jedną z najefektywniejszych metod jest użycie funkcji do obsługi wyrażeń regularnych Perla preg_replace(). Funkcja zapisująca dane powinna móc pobierać wartości w postaci tablicy i zwykłej zmiennej, jako że w przypadku zmiennej potrzebne będą dwie wartości: nazwa zmiennej i jej wartość, a w przypadku tablicy jedna: tablica z indeksami w postaci nazw i wartościami w postaci wartości, to druga wartość powinna być ustawiona na domyślną. W związku z tym także wewnątrz metody powinno być sprawdzenie czy podany argument (tylko pierwszy) jest tablicą. Jeśli chodzi o metodę wyświetlającą wynik można zrobić ją oddzielnie, ale można także wyświetlić wynik zaraz po zamianie wzorców, jeśli jednak preferujesz czytelniejszą wersję powinieneś zapisać wynik zamiany a następnie wywołać go oddzielnie, ja jednak posłużę się bardziej wydajniejszą wersją wyświetlę wynik zaraz po zamianie wzorców. Tak więc z założeń nasza klasa powinna wyglądać następująco:
class Szablon { //ustawiam dwie zmienne var $plik_szablonu; //druga będzie przechowywała dane wykorzystane we wzorcach var $dane; //Uwaga zmienna ta jest tablicą, wypada to zainicjować można to zrobić tutaj function Szablon ( $plik ) //konstruktor dla klasy szablon function zapisz( $nazwa, $wartosc=” ) //jak wcześniej wspomniałem druga zmienna //ostatnia funkcja będzie zamieniała wzorce oraz je wyświetlała, jeśli chcesz użyć oddzielnej funkcji do wyświetlania, zdefiniuj jeszcze jedną właściwość, a następnie w metodzie, którą teraz zdefiniuję zapisz wynik do zdefiniowanej właściwości, a następnie zdefiniuj jeszcze jedna metodę, która będzie zwracała tylko właściwość z przetworzonym szablonem function wyswietl() |
To tyle, jeśli chodzi o przygotowanie, korzystanie z tego jest bardzo łatwe, dołączamy plik z przygotowaną wcześniej klasą Szablon, tworzymy egzemplarz tej klasy, dodajemy wartości przy pomocy metody dodaj a na koniec wyświetlamy wynik, w praktyce wygląda to tak:
<?php require(“szablon.php”); //plik z klasą Szablon $szab = new Szablon(“index.tpl”); //plik z szablonem //teraz dodaję wartości, np.: $szab->zapisz(“tytul”, “Moja strona”); //można dodać też tablicę: $szab->zapisz(array(“moj_wiek” => “17”, “moje_imie” => “Wojtek”)); //na koniec wywołujemy gotowy szablon przy pomocy echo() lub print() echo $szab->wyswietl(); ?> |
I gotowe, teraz można to uruchomić podając za szablon plik podany dla przykładu na początku i wszystko powinno działać.
Jest to bardzo efektywne i proste, a przede wszystkim pozwala oddzielić kog HTML od kodu PHP, a przecież o to chodziło. Nie jest to oczywiście wszystko w tym temacie, można także implementować własne funkcje do innych celów, można wykorzystywać wzorce do wywoływania funkcji, lub dodać własne metody do obsługi szablonów, ale to wszystko kwestia własnego widzimisie i pozostawiam to wam.
Są oczywiście gotowe systemy obsługi szablonów, w tym wypadku polecam Swarty, jest dobrze dopracowane i ma dużo możliwości, ale o tym w innym artykule.