Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Szablony i Systemy Szablonów

Śmiertelne grzechy szablonowania

Przyszedł czas na Śmiertelne grzechy szablonowania i pokazanie dlaczego projekty, takie jak Smarty i patTemplate, kompletnie straciły wątek.

Najpierw rzućmy okiem na dokumentację Smarty. Rzut oka wystarczy, abyś stwierdził, że daleko temu do prostoty. W rzeczy samej jeśli popatrzysz poniżej nagłówka "Smarty for Template Designers" ("Smarty Dla Projektatów Szablonów"), to jedną z pierwszych pozycji jaką znajdziesz będą "funkcje"! Czy oni oszaleli? Oto przykład jak to się robi w Smarty:

{config_load file="colors.conf"}

{include file="header.tpl"}

{if $name eq "Fred"}
You are not allowed here
{else}
Welcome, <font color="{#fontColor#}">{$name}!</font>
{/if}

{include file="footer.tpl"}

Na początek zauważ, że wszystkie użyte znaczniki "{tag}" nie są zgodne ani z XML ani z HTMLem - jeśli nie zostaną sparsowane to zostaną one wyświetlone w przeglądarce. Twój stary, dobry PHP tak nie robi.

<h2><?php echo($title);?></h2>

Znaczniki otwarcia i zamknięcia PHP są HTMLo-lubne, więc jeśli przeglądarka je zobaczy, to je zignoruje.

Spytaj również samego siebie: "Ile edytorów, popularnie używanych przez projektantów www, wspiera (lub będzie to robić) składnie Smarty?". Używając PHAkt możesz używać PHP w Macromedia's Dreamweaver MX, popularnym narzędziu wśród webmasterów.

Wszystkie te szablony sprawiają, że koderzy PHP czują się lepsi od web designerów. Przecież przeprowadzenie ich przez kilka podstawowych sekcji specyfikacji PHP i pokazanie im jak funkcjonują konstrukcje warunkowe oraz jak działa prosta metoda echo() to wszystko czego potrzebują. Tobie nauka PHP nie sprawiała trudności prawda? Jestem pewny, że oni również nie mieliby problemu.

Więc... aktualnie to tego nie robi. Jeśli budujesz jakikolwiek rodzaj interaktywnej aplikacji, na pewnym poziomie kod musi oddziaływać na treść. Szablony sprawiają, że twój kod jest czytelny, ale nie jest kompletnie odseparowany od treści. Ciągle potrzebuje coś w rodzaju mapy (np. tablicę), aby zidentyfikować znaczniki do podmiany. Tymczasem, po stronie szablonów, zacząłeś wykorzystywać znaczniki do obsługi pętli, warunków i całej reszty przeróżnych funkcji, które z powrotem mieszają kod z treścią. Wszystko byle nie PHP.

Zgadzam się z tym, że mieszając PHP z końcowym rezultatem, z HTML lub czymkolwiek innym, prawdopodobnie skończy się to bałaganem. Może to zabrzmi trochę jakbym był nienormalny, ale co istotne popularnym rozszerzeniem hasła "Oddziela kod od treści" jest "Sprawia że moja aplikacja jest warstwowa". Projektowanie warstwowych aplikacji to olbrzymi temat, pragnąłbym odesłać cię do tej dyskusji, jako do punktu startowego. Szablony mogą zostać użyte jako część projektowania warstwowego, ale prosto wbudowując szablony w twoją aplikację.

Ale twoja aplikacja nie zwolni, jeśli nie napiszesz własnego języka programowania i zbudujesz interpretera w PHP do parsowania go!

Są przypadki gdzie cachowanie jest pomocne, np. kiedy używasz Orientacji Obiektowej do budowy strony, która nie zmienia się często. W innych okolicznościach, możesz rozpatrzyć cachowanie końcowego rezultatu, HTMLa lub cokolwiek innego, i wyświetlanie go zdalnie za każdym razem gdy strona jest żądana, zamiast budować ją całą od podstaw.

Sprawdź możliwości rodzimego Buforowania Wyjścia dostępnego w PHP. Możemy przyrostowo buforować części naszej strony i cachować je (poprzez ob_get_contents()).

Jesteś pewny? Po pierwsze, czy twój parser szablonów posiada obsługę błędów? Czy jest zdolny do debugowania szablonu? I dokładnie ile szablonów posiadasz obecnie?

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (10)
Smarty != każdy system szablonów
Środa 01 Kwiecień 2009 3:42:08 pm - Zyx <nightstorm_at_tlen.pl>

Jeśli chcesz mieć pętle oraz instrukcje warunkowe, to faktycznie, używanie Smarty'ego itd. jest wynajdywaniem koła na nowo, gdyż poza klamerkami praktycznie nic się nie zyskuje, a zamiast tego są nawet ograniczenia, gdyż w PHP od biedy można sobie pomóc obiektówką itd.

Ale czy sam PHP jest najlepszy? PHP to język imperatywny, jak chcesz mieć listę albo wyświetlanie drzewka, musisz sobie zaprogramować to samodzielnie od A do Z za każdym razem, gdy potrzebujesz tego użyć. PHP nie rozumie, co ten kod ma robić, on ma listę kroków i wykonuje zadanie, jak leci, bez patrzenia na sensowność. Opcjonalnie, można to popakować w klasy itd., ale wtedy stracimy kontrolę nad treścią takich pętli, a do czego prowadzą próby rozwiązania tego typu problemów, wystarczy spojrzeć na frameworki. Przykro mi to stwierdzić, ale WSZYSTKIE frameworki mają schrzanioną warstwę widoku równo, jak leci, gdyż autorzy właśnie rzucili się na PHP. I tak np. w ZF mamy takiego potworka, jak "placeholderLoop()", który robi... pętlę! Skoro osobny język szablonów jest "zły", to dlaczego takie coś jest cacy, skoro to jest to samo i różni się opakowaniem? I też prowadzi do wzrostu liczby plików, bo treść takiej pętli musimy podać w osobnym szablonie. Więc twierdzenie autora, że paranoje są tylko w Smarty'm, jest jak najbardziej błędne. Druga rzecz jest taka, że ten sam problem (zdefiniowanie wyglądu jakiegoś komponentu) frameworki rozwiązują inaczej dla każdego komponentu. Chcesz skonfigurować formularz, musisz uczyć się jednego sposobu, chcesz skonfigurować wygląd stronicowania, do nauczenia jest druga technika i kolejne API, właśnie z powodu niedomagań PHP jako "najlepszego języka szablonów". Pomijam już fakt, że taka konfiguracja potrafi zająć kilka ekranów tekstu, bo w końcu gdzieś muszą się te dziesiątki warunków znaleźć.

Oprócz programowania imperatywnego jest też wiele innych stylów programowania, np. deklaratywne, gdzie określamy tylko, co chcemy uzyskać i nie martwimy się o implementację (takim językiem jest np. SQL - ile osób w ogóle zna jakieś imperatywne języki komunikacji z bazą danych?). Tworząc nowy język szablonów, możemy wpłynąć na cały jego kształt i porządnie zrealizować te elementy, które w PHP są trudno wykonalne lub wymagają kombinowania do trzeciej potęgi. Możemy właśnie zmienić styl programowania, zrobić język deklaratywny i okaże się, że możemy nim robić to samo, co w PHP, ale znacznie szybciej, bo nie musimy martwić się o implementację. Do tego dziedziczenie szablonów, mechanizmy ponownego wykorzystania kodu dostosowane do potrzeb HTML-a, a nie implementowania algorytmów. Nie ma czegoś takiego, jak "najlepszy język", są jedynie różne podejścia, a niedowiarkom polecam powrót do klepania skryptów do stron WWW w assemblerze - PHP powstał dokładnie z tego samego powodu, z którego powstają dedykowane języki do tworzenia szablonów...

Do góry dnem?
Czwartek 28 Czerwiec 2007 10:39:21 am - wnuk4 <wnuk4_at_o2.pl>

"Teraz szablony pochodzą z idei, że prawdopodobnie zaprojektujesz najpierw interfejs użytkownika, a następnie dopasujesz aplikacje do niego." - autor tekstu tym komentarzem do góry dnem postawił projektowanie systemów, jako pierwsze wykonuje się zazwyczaj w modelu systemu informatycznego diagramy przypadków użycia, ew. diagramy sekwencji, w wypadku aplikacji www dołożyć można do tego diagramy stron oraz ważny jest na samym początku dobrze zaprojektowany interfejs użytkownika następnie dopiero przystępuje się do prac związanych z budową diagramu klas który stanowi podwaliny pod projekt bazy danych, potem zaś następuje pisanie kodu i ew. poprawiania w kolejnych fazach pewnych el. diagramów gdyż nie wszystko da się przewidzieć, jest to moim zdaniem absolutne minimum. Wracając do tematu stosowanie szablonów takich jak Smarty poprawia czytelność kodu aplikacji i pozwala prościej oddzielić od siebie warstwy, to jest dla mnie główna zaleta i tak najbardziej dopracowaną architekturą jest dla mnie J2EE, za swą kompletność i przemyślaną architekturę oraz wsparcie Suna ale to jest już moja subiektywna opinia.

co to wogole jest
Wtorek 21 Listopad 2006 3:28:36 pm - ppysznik

autor albo bardzo nie lubi albo nie potrafi uzywac Smarty, poteznego i b.szybkiego silnika

w kazdym swoim duzym projekcie korzystam ze Smarty, probowalem chyba wszystkiego i nic nie dalo mi takiej swobody i elastycznosci jak ten system

argument, ze to nie tylko szablony ale i wbudowane funkcje, jest tylko zaleta dla bardziej zlozonych projektow

i do tego to ASP na koncu...mozemy zrobic zawody w czym szybciej napiszemy aplikacje, w PHP czy ASP, nawet najprostsza

test
Wtorek 14 Listopad 2006 10:41:47 am - sabistik <test_at_php.pl>

test

a jednak autor mial racje
Piątek 01 Wrzesień 2006 10:20:55 pm - g00fy

a ja zgodze sie z autorem.
smarty zamiast prostych szablonow dostarczaja nam dodatkowy jezyk aplikacji ktory jest zbedny.
pozatym , czy php jest naprawde takie trudne?

mialem stycznosc z grafikami w firmach ktore robia strony profesjonalnie , i wszyscy znali tam podstawy php.

pozatym sam uzywam obiektow w czasie generowania stron i operuje na buforze , a niestety przez smarty nie mam dostepu do wielkiej funkcjonalnosci ktora daje nam php,

imho to zadanie ktore lezy po stronie autorow php do stworzenia natywnej i prostej biblioteki do obslugi szablonow, tak samo jak bylo z stworzeniem zend framework...

A gdzie funkcjonalność, wygoda?
Czwartek 31 Sierpień 2006 12:48:31 pm - SHiP <meetal_at_o2.pl>

Nie wyobrażam sobie tworzenia stron za pomocą phpHTMLLib. To mija się z celem. Parsery szablonow są to się aby ułatwić sobie tworzenie nowych stron. Operowanie na czystym htmlu jest dużo łatwiejsze. Poza tym osoba nieznająca sie na php moze stworzyć własny szablon. Łatwiej jest aktualizować taką klasę. Dodać pluginy, wtyczki itp. chociażby obsługa jezyków jest wygodniejsza.

Podoba mi sie natomiast pomysl autora z renderowaniem w locie. Musze pomyseć o tym w mojej klase ;)

Zupełnie bez sensu
Sobota 26 Sierpień 2006 12:02:10 pm - pepe000

Gdybym nie miał doświadczeń ze Smarty, ten art napewno by mnie zniechęcił. Autor wyrządza krzywdę tym początkującym. Proszę mi wierzyć - wiele razy słyszałem bluzgi grafików którzy mieli przerabiać niby HTML'ki ze mieszane z kodem PHP. Do co dla nas może być oczywiste (choć nie uważam że czytelne), dla kogoś kto zajmuje się tylko stroną wizualnie, dostaje szału widząc PHP wbudowany w HTML. Powiem więcej - te same osoby kiedy dostały pierwszy raz templaty w Smarty teraz nie wyobrażają sobie czegoś innego (mimo początkowej niechęci). Teorie wysnuwane w tym artykule (poparte niewybrednymi przykładami) są strzałem kulą w płot.

^^^
Niedziela 14 Maj 2006 7:59:31 pm - karolski

nie no tekst dalej uswiadamia ludzi ze nie warto uzywac szablonow xD

ale to co na koncy jest przytoczone to jest ciekawe ale jak sciagnolem sobie phphtmllib to stwierdzilem ze wole bez ;p

o co chodzi?
Wtorek 21 Luty 2006 11:39:47 pm - nickesh

O czym tak wlasciwie jest ten artykul? W sumie, nie wnosi nic nowego. Moznaby go strescic: "nie warto uzywac szablonow". To tak jakby znienawidzic Jave dlatego, ze potrzebuje wirtualnej maszyny... :/

tez tak myslalem
Czwartek 19 Styczeń 2006 12:34:44 am - peter riley

Myslalem podobnie, dopoki nie zaczalem uzywac Smarty :-)

Czy ktos moze mnie oswieci co autor artykulu mial na mysli w tym fragmencie:
"Innym zagadnieniem jest używanie zamiast include() funkcji takiej jak fopen(), aby załadować szablon do zmiennej, a następnie "sparsować" ją przy pomocy eval(). Będzie to wolniejsze, dając pośrednie wyjście w przypisywaniu szablonu do zmiennej PHP - przynajmniej nie będziesz pod urokiem systemów szablonów."

A tak swoja droge tekst fatalnie przetlumaczony, niestety nie tylko ten. Niektore fragmenty wygladaja jak przetlumaczone przy uzyciu tlumacza komputerowego.

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System