To Smarty or not to Smarty?
February 9, 2009 – 12:51 amAm văzut zilele astea o gramadă de articole adresate împotriva Smarty (sistemul de templates pentru PHP). Exista până și un site dedicat împotriva Smarty.
Pentru mine Smarty a însemnat o adevărată revelație prin anii 2003-2004, marcând un punct de cotitură asupra felului cum scriu cod PHP. Până atunci, codul meu era un mix interminabil de HTML și PHP. Însă când am descoperit Smarty, am început să înțeleg și să aplic cu adevărat ceea ce tot repetau profesorii prin facultate: separarea Business Logic de Presentation Logic.
Aș putea spune că sunt atașat emoțional de Smarty. Când am văzut primul articol în RSS reader am zis că e doar un caz izolat, un tip căruia i s-a pus pata pe Smarty. Însă când am văzut articolele următoare într-un interval scurt de timp, au început să mi se aprindă beculețele de alarmă. O fi Smarty chiar așa de rău?
Am citit toate (contra)argumentele de pe nosmarty.net și pot să spun că nu sunt bazate pe argumente solide. Nu stau să detaliez pentru că nu am nici timp și nici chef.
If you guys don’t agree with me, you can spend hell lot of time learning that {$name} actually does what you could do with “echo $name”.
Nu înțeleg cum autorul unei cărți despre Smarty poate să spună așa ceva. Din câte îmi amintesc, nu mi-a luat mai mult de juma de oră să învăț Smarty (cu tot cu instalare).
Ok, Smarty nu e perfect, însă hai să nu-l denigrăm în halul ăsta!
Smarty m-a slujit exemplar în multe proiecte și n-am fost nevoit să caut alternative. Totuși, publicitatea asta negativă mă face să scot capul din nisip și să mă uit la alte siteme de templates. Încă n-am încă găsit timpul necesar, dar ar fi o prezentare interesantă pentru PHP GeekMeet.


23 Responses to “To Smarty or not to Smarty?”
Cateva alternative la Smarty ar fi: PHPTAL, Zogan, patTemplate sau CodeIgniter Parser.
http://www.ovidiugabriel.net/2009/02/alternative-la-smarty.html
By ovidiugabriel on Feb 9, 2009
Şi eu sunt împotriva Smarty. Mi se pare că-ţi rezolvă nişte probleme pe care nu le-ai avea dacă nu ai lucra în prealabil cu Smarty.
Zend Framework FTW!
By Tudor on Feb 9, 2009
Eu nu sunt impotriva Smarty. E foarte bun, mai ales pentru proiecte mai mari.
By ovidiugabriel on Feb 9, 2009
Dacă e bun sau nu Smarty depinde de felul în care se gândește și organizează munca. Smarty a ieșit în evidență datorită faptului că nu te lăsa să mânărești datele în șablon, în cel mai rău caz puteai să iterezi sau printezi. Dar asta vine de la simpla idee că cel care dezvoltă și întreține șabloanele Smarty nu trebuie să știe Business Logic, doar eventual o buclă pentru liste, în rest (x)html și css, adică prezentare. Dacă ajungi să ai nevoie de un ‘echo $name’ într-un șablon atunci problema e la un nivel (sau mai multe) mai sus și Smarty nu e de vină, doar că se folosește greșit o unealtă bună. Și câți din cei anti-Smarty au creat pluginuri (ce-i extensiv folosit de jsf/facelets)? Dacă aș avea alegerea aș folosi Smarty.
By Igor on Feb 9, 2009
“You know you’re popular when there’s a noYOU.com site out there”
Cred ca tipul ala ce a facut nosparty a fost obligat sa lucreze cu smarty prea mult sau ceva de genul asta altfel nu ar incerca sa convinga lumea sa nu-l mai foloseasca.
Eu nu am vazut niciodata avantaje extraordinare in lucrul cu template engines cum e smarty si altele.
In opinia mea PHP e deja un template engine, sunt deacord cu separare cod si html dar poti face asta si fara template engine. Cat de greu poate sa fie sa pui cat mai putin cod php intr-un html si sa faci un include?
Pun pariu ca puteai mai usor sa faci fara Smarty decat su el si nici nu mai pierdeai juma de ora sa-l inveti. Oricum cred ca juma de ora ti-a luat ca sa inveti basic stuff, pana sa ajungi sa scri template-uri ca un zmeu te-ai mai uitat de cateva ori peste documentatie
Caching-ul nu e un motiv destul de bun pentru a folosi smarty, daca vrei caching e mult mai eficient sa folosesti ceva de genul APC, xCache sau eAccelerator.
By Mihai Secasiu on Feb 17, 2009
@Mihai Secasiu:
La proiecte mari, e destul de greu
In plus, e foarte bun pentru incepatori, chiar te ajuta sa faci acea separare de cod din care altfel ai fi tentat sa faci o varza.
Legat de invatat…. de fapt, ce e de invatat? Sa faci un assign, un if si un foreach? Normal ca pentru chestii mai avansate gen plugins trebuie sa te mai uiti in documentatie. Dar nu e asa la orice limbaj?
Legat de caching, normal, asta nu e motiv sa folosesti Smarty. E doar un bonus
By Mihai Brehar on Feb 17, 2009
Nu am folosit niciodata caching la Smarty. Am incercat odata dar nu a functionat corect. foreach in smarty? parca era vorba de separare.
PHP este un template engine daca vrei sa il folosesti pentru a genera cod. Daca il folosesti pentru a rula cod, e un interpretor. So, un template engine nu ar trebui sa te lase sa “manaresti” datele.
By ovidiugabriel on Feb 18, 2009
@ovidiugabriel: da, foreach, similar cu section
http://smarty.net/manual/en/language.function.foreach.php
Ce treaba are foreach cu separarea?
By Mihai Brehar on Feb 18, 2009
section e ok. foreach nu prea e.
By ovidiugabriel on Feb 18, 2009
De ce?
Section poti sa folosesti doar pe un array cu indecsi de la 0 la n (ordonati). Pe cand cu foreach poti sa parcurgi orice array.
By Mihai Brehar on Feb 18, 2009
@Mihai Brehar cele 2 avantaje listate in comentariul tau se cam contrazic cumva.
Adica daca esti incepator nu prea faci proiecte mari deci nu tre sa-ti fie greu sa separi codul de html.
Si oricum tot nu-mi dau seama de ce la proiecte mari e mai usor sa scri {{DUDE}} inloc de < ?=$dude?>
sau de ce e gresit sa scri
< ?php foreach(...) { ?>
cod html
< ? } ?>
…. adica daca ai nevoie scri tot aia si cu smarty numa ca arata altfel.
Eu de cate ori vad ceva de genul {{USER_NAME}} imi zic : “ce stupid, nu-i tot atat ca scriu < ?=$user_name?>?” da stiu e un caracter in plus dar o gramada de cod inutil in minus
Ah si te rog pune si tu threaded comments ca nu suntem pe twitter
@ovidiugabriel I like freedom. Treaba asta cu nu ar trebui sa te lase e shit…go to java buoy… Nu vreau sa ma controleze pe mine limbajul ci eu pe el. Era o vreme cand scriam aplicatii web ( CGI ) in C
Ce, ti-e frica de designer-ul tau ca-ti saboteaza aplicatia sau care e problema ?
By Mihai Secasiu on Feb 19, 2009
@Mihai Secasiu: de fapt: “I am coming from C/Java”.
Exista programatori care se simt liberi in orice limbaj. Si problema nu e ca ma saboteaza designerul, dar cand ai un programator si un designer si trebuie sa urmareasca unul in fisierele celuilalt si nu se inteleg, sa vezi ce frumos este. (eu ma refeream strict la urmatorul lucru: Smarty oferă posibilitatea unui flow-control. utilizarea excesivă a acestei facilităţi duce la apariţia unei logici a aplicaţiei în interiorul view-urilor)
Daca la aplicatiile desktop designerul de interfete grafice trebuia sa fie programator, cel putin la web sa lasam designerul sa fie designer.
Acum asta e parerea mea si nu cer nimanui sa accepte “teoria” care poate e total aiurita.
By ovidiugabriel on Feb 19, 2009
Nu se contrazic.
Normal ca daca esti incepator nu faci proiecte mari, dar e foarte util sa ai constrangeri. Daca nu ai constrangeri, incepi sa faci lucrurile cum te taie capul. Smarty te ajuta sa fii disciplinat.
By Mihai Brehar on Feb 20, 2009
flickr foloseste smarty.
enuff said.
By andrei on Feb 25, 2009
@andrei total irelevant. Ce, fara smarty nu era la fel de bun (sau prost) ? Ce te face sa crezi ca flickr e ce e din cauza lui smarty?
@Mihai Brehar – asa se fac aplicatii ineficiente pentru ca inloc sa conteze optimizarea conteaza disciplinarea programatorului.
@ovidiugabriel – smart nu ofera mai mult flowcontrol decat php-ul. Daca ai nevoie de ceva care sa te constranga problema e altundeva. Designer-ul nu are ce urmari mai mult cu php inloc de smarty? Daca se simte amenintat cand vede inloc de {{ }} ia-ti alt designer
By Mihai Secasiu on Mar 3, 2009
@Mihai Secasiu, nu vad legatura intre optimizare si disciplina din ceea ce zici tu
In orice caz, nu are rost sa continuam discutia. Nu am zis ca smarty e cel mai bun. Am zis doar ca eu il folosesc si ca-mi place. Nu vreau sa te conving si pe tine de acest lucru.
Fiecare foloseste ceea ce crede ca e mai bun pentru task-ul respectiv.
By Mihai Brehar on Mar 3, 2009
Daca e sa includ software extern in aplicatia mea trebuie sa-mi aduca un beneficiu real, vizibil pentru aplicatie. A instrui programatorul prin constrangeri chiar nu e un beneficiu.
“nu are rost sa continuam discutia” ? what? pai atunci de ce mai ti comentarii deschise?
Inteleg ca iti place smary si e ok asta, inteleg ca nu vrei sa convingi pe nimeni sa foloseasca si nici eu nu cred ca incerc sa conving pe cineva sa nu foloseasca dar credeam/speram ca discutia sa fie despre beneficiile de a folosi sau nu smarty sau un alt template engine ci nu despre ce ne place sau nu?
Normal ca fiecare foloseste ce vrea dar cred ca toti vrem sa stim daca nu cumva e o cale mai buna ? si de ce e mai buna?
By Mihai Secasiu on Mar 3, 2009
Ok, am putea continua discutia mult si bine, si chiar mi-ar place acest lucru. Insa momentan sunt constrans de timp.
Daca nu vii la PHP GeekMeet, poate iesim odata la o bere, discutia ar merge mai usor
By Mihai Brehar on Mar 3, 2009
Bun, constrangeri de timp inteleg mai bine decat constrangeri de template
Sper sa mai fie si alt PHP GeekMeet si da poate se continua discutia la o bere … ar putea deveni de-a dreptul filozofica
By Mihai Secasiu on Mar 4, 2009
Sunt de parere ca Smarty e un template engine destul de bun. Normal ca pt unele aplicatii(mai avansate, complexe), e indicata implementarea unui sistem propriu pt template-uri care sa faca atat cat este nevoie. Ca o alternativa pt cei impotriva Smarty as zice XTemplate(una dintre chestiile interesante ale lui ar fi iterarea externa si nu din template) care mi se pare ok din toate punctele de vedere.
By Tudor Popa on Apr 1, 2009
Cel mai rapid template engine ramane PHP. Daca ai un sistem bun de caching si un template engine “home-made” facut in PHP atunci Smarty devine inutil. Si eu am folosit Smarty si a fost excelent. Problema se pune altfel. Separarea codului implica si separarea responsabilitatilor? Un programator din cate stiu eu intotdeauna se va implica in crearea template-urilor indiferent ca se foloseste Smarty sau altele. Problema nu se pune de separare ci de viteza! DACA reusesti sa faci un template engine mai rapid ca Smarty (si majoritatea programatorilor cu ceva experienta stiu ca se poate) atunci NOSMARTY! Daca esti lenes => folosesti Smarty. Eu personal in cateva luni ma las de Smarty. Conceptual este excelent, in practica insa viteza si organizarea primeaza. Toate cele bune!
By Julio on Jun 12, 2009
Smarty sau alte template engines nu implica nimic altceva decat folosirea variabilelor variabile si duplicarea functionalitatii deja existente in PHP.
Singurul argument PRO-smarty ar fi impartirea responsabilitatilor: programator vs. web designer.
Insa refuz sa cred ca un webdesigner (care daca e bun stie si programare javascript, nu?) nu poate sa inteleaga ce e cu bucla foreach sau ce sunt obiectele si proprietatile acestora. Multe dintre conceptele astea sunt prezente si in client-side programming.
Concluzia: Smarty este pentru webdesignerii prosti. Scuze daca am ranit pe cineva la orgoliu, dar asta e realitatea pura desi crunta.
By OriginalCopy on Jun 15, 2009
Nice to see some anti-smarty support here
By Mihai Secasiu on Jun 16, 2009