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: (8)
Coś tutaj nie halo
Wtorek 25 Październik 2011 2:52:29 pm - boreq <masterboreq_at_gmail.com>

Dlaczego "autor" (sic!) nigdzie nie napisał, że jest to mniej lub bardziej dowolne tłumaczenie tego artykułu: http://www.phppatterns.com/docs/design/templates_and_template_engines?
A może istnieje jakaś informacja w innym miejscu portalu, że ten właśnie artykuł (a może inne też?) to tłumaczenia utworów innych autorów? Czy przypadkiem tego nie wymaga prawo, a co najmniej... przyzwoitość?
Ach, no i jeszcze link do serwisu, gdzie oryginał się znajduje podaje - wyborne!!!
Weźcie to poprawcie, bo wstyd.

Racja - web-designer tylko do css
Niedziela 09 Sierpień 2009 3:31:53 pm - korkie

Autor ma wiele racji.
Trudno liczyć na to, że webmaster odciąży programistę.
Czasami z bardzo prostego kodu, np. na wyświetlanie menu (dynamicznie tworzony url), zamiast z jednej trochę bardziej skomplikowanej linijki kodu trzeba wszystko przekombinowac tak, aby było więcej linijek (choć mniej skomplikowanych) jednak dostosowanych do parsowania przez smarty.
Dlatego lepiej aby warstwę prezentacji obsługiwał
średniej klasy, czy nawet początkujący programista php, niż webmaster z porażeniem mózgowym, któremu trudno cokolwiek więcej zrozumieć niż wstawienie zmiennej w nawiasy klamrowe.

Tylko i wyłącznie szablony php
Środa 05 Sierpień 2009 5:54:25 pm - pearl1985

Jakikolwiek by nie był system szablonów, to tylko i wyłącznie używanie szablonów w rodzimym php pozwoli uzyskać najlepszą wydajność.

A przy tym do niczego się nie ograniczasz, potrzebujesz switch, masz switch, for, while, foreach, array_values itp. rzeczy.

A smarty apropo, generują plik php, i potem go includują więc lepiej samemu napisać prostą klasę do includowania plików php i potem importować pliki php (w którym jest szablon), i samemu napisać logikę generowania się owego szablonu niż zaufać smartom.

ankieta
Czwartek 18 Październik 2007 6:57:23 pm - grzesk98 <grzegorz.kowalewski_at_gmail.com>

Witam,
jeśli moglibyście wypełnić ankietę na temat systemów szablonów:

http://ankiety.boby.pl/index.php?module=polls&action=fillup&poll_id=74

z góry dzięki.

actually
Środa 03 Październik 2007 12:16:46 am - ocochodzi <hetkris_at_op.pl>

Tłumaczenie "Więc... aktualnie to tego nie robi"

oryginał: "Well actually no it doesn&#8217;t."

"Actually" chyba powinno byc tlumaczone jako "właściwie".

Smarty? - Tak, ale rozsądnie.
Środa 12 Kwiecień 2006 9:26:49 am - wiktoros

Podejście autora artykułu do systemów szablonów uważam za zbyt radykalne.
Faktycznie, jeśli w szablonie (konkretnie Smarty), użyje się zbyt dużo funkcji typu {if}, {section}, itp., to jego używanie mija się z celem. Tak rozbudowany plik przestaje być szablonem, a zaczyna być kolejną stroną kodu. Przyznaję też, że wszelkie dodatki formatujące tekst typu {lower}, {upper}, {capitalize}, {indent}, itp. są nieporozumieniem, bo formatowanie powinno odbywać się raczej przez użycie CSS.
Ale jeżeli użyjemy funkcji dodatkowych w stopniu minimalnym, a skupimy się głównie na prezentacji przekazanych zmiennych, powstanie nam szablon bardziej przejrzysty niż ten, który stworzylibyśmy sami, w oparciu tylko o PHP.

Zawsze o tym wiedzialem ...
Poniedziałek 06 Luty 2006 10:29:56 am - __Djack__

Smarty nie nadaje sie na system szblonow .... zamiana phpowego jezyka na jezyk smarty ?? Uzywam innego systemu jedyne co posiada z jezyka programowania to if/else - duzo pomaga. Natomiast reszte do sparsowania trzeba dostarczyc np. w postaci tablicy - wiem ze i to jest nie za wygodnie ale z dwojga zlego wole to. Separacja jest dlatego wazna ze jezeli chce zmienic tylko sam design strony to nie musze sie martwic o reszte tylko odpowiednio umiescic zmienne do sparsowania. Kazdy ma swoje zdani i nic na to nie poradzimy, a jak dla mnie smarty jest tylko i wylacznie poularne. To tak jak z windowsem to co jest popularne i dobre dla wszystkich nie znaczy ze jest najlepsze :D

Pozdrawiam

Dziwny tekst
Wtorek 10 Styczeń 2006 8:14:59 am - piernik

Musze przyznać że tekst ten jest conajmniej dziwy. Nie wiem co autor chciał uzyskać...

"Artykuł omawia kiedy szablony są użyteczne, jakie mają wady i w jakich sytuacjach to zły pomysł."

Takie było założenie, ale nadal nie wiem czy sa użyteczne, kiedy to zły pomysł. Poza tym Autor chyba w ogóle zapomniał o użyteczności szablonów. Postawił tezę że szablony są be i pórbował ją w pokrętny sposób udowodnić.

Dla mnie artykuł to misz-masz bez konkretów.

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