PHP Smarty – zlo ali nebesa – uporabiti ali ne?
Velikokrat se krešejo mnenja o tem (sploh zadnje čase) ali uporabljati Smarty ali ne. Mnenje glede tega je seveda pri vsakem drugače, zato si poglejmo nekaj dejstev, ki bodo začetniku oz. nekomu, ki se odloča o tem ali naj uporabi Smarty ali ne pomagalo pri tej odločitvi.
Kaj Smarty sploh je?
Smarty je PHP template sistem, ki (poskuša ločiti) loči logiko programa od prezentacije.
Torej glavni namen Smarty-a je, da nam pomaga pri sami prezentaciji oz. izpisu vsebine.
Kratek primer
PHP programer naredi funkcijo (objekt), ki dobi vse novice iz baze in jih sortira po času zadnje spremembe ter vsaki novici doda še nekaj dodatnih informacij. Tabelo novic nato doda / nastavi v Smarty interno tabelo spremenljivk, tukaj se zaključi logika in začne prezentacija. Primer dodajanja PHP spremenljivke v interno Smarty tabelo spremenljivk:
-
$template->assign('news', $news);
Velikokrat želimo izpisati le del novice, zato uporabimo {$novica|truncate:30}, ki novico skrajša na 30 znakov. S tem pustimo samo logiko sistema pri miru in modificiramo le samo vsebino. Dodamo lahko tudi dodatno logiko v imenu oblike kot na primer, če je prva novica naj bo rdeč ozadje drugače moder. Preberi tudi Kratek nasvet sekcijo.
Oblikovalec torej ve le (v našem primeru definirano s strani programerja), da se vse novice nahajajo v spremenljivki {$news}. Vse ostalo, kako so se novice kreirale, dobile iz baze njega ne zanima. Njegova naloga je le ta, da bo izpisal te novice. Kakšen design bo uporabil je čisto njegova stvar.
Prednosti (poglavitne):
Večini ljudi je smarty {$title} bolj pregledno kot PHP
... način izpisa. Vsekakor je manj dela s php tagi. Zaradi bolj pregledne kode je vzdrževanje krajše in hitrejše. Tudi ponovna uporaba za prezentacijo je lažja. Dodatna prednost je tudi, da se oblikovalca lahko loči od logike sistema. Smarty ima za vse napake svoje error handler (o katerem smo že pisali na blogu), ki so bolj prijazne in pregledne oblikovalcu. Zelo dobra dokumentacija, ki je po mojem mnenju zelo dobro spisana.
Slabosti (poglativne):
Zadevo se je treba naučiti. Tako programer kot oblikovalec (malce težja in večja naloga). Izvajamo dodatni proces, torej je vse skupaj počasnejše kot če bi naredili template izključno s PHP kodo. Tukaj se velikokrat poda, da Smarty podpira tudi cache, vendar tudi PHP podpira cache, torej to ni neka "oddolžitev" za dodatni proces. Dejstvo, da je zadeva počasnejša, obstaja. Res pa je, da je razlika zanemarljiva pri manjših - srednjih straneh. Zaradi dodatne kode je možnost, da nekaj ne bo delovalo večja kot če bi uporabili striktno le PHP funkcije, ki so dodobra testirane.
Kratek nasvet:
Vsi tisti, ki boste Smarty uporabili pri svojem projektu, si zapomnite, da je Smarty namenjen izpisu vsebine in modifikaciji vsebine v imenu prilagoditve za izpis in ne za dodatno logiko naprimer dobivanje novih informacij o sami vsebini v templat-u. Vsake (večje) dodatne opracije naj se opravijo s PHP-jem, nato pa se vsebina izpiše s Smarty-em. Zgrešen pogled čemu je Smarty namenjen največkrat privede k izumljanju težav oz. kompliciranju.
Dodatne informacije:
- Uporabiti smarty ali ne
- Smarty - ne uporabljate
- Kratek pregled Smarty-a s tremi primeri
- php-si.com - tema o težavah pri Smarty-u ter nekaj mnenj ali uporabiti ali ne
- Smarty pooseblja zlo
Trsplet.com uporablja Smarty pri večini spletnih strani, kjer sama stvar ni kompleksna in je ponavadi nekaj takega kot uvod-predstavitev podjetja-kontakt. Stvar se v našem primeru, kje se delo razdeli med razvijalca in oblikovalca vsekakor obnese.
Imel sem priložnost delati tudi na večjem projektu pri katerem so postali Smarty templati zelo veliki in tam lahko potrdim, da bi delo s samo PHP kodo (torej pure PHP template) zadevo pospešil in naredil lažje za urejat. Za osnovne predstavitvene strani pa je Smarty vsekakor, vsaj za trsplet.com, dobra izbira.
Ker pa je seveda vsako mnenje subjektivno še ostale obiskovalce prosim naj strnejo svoje misli (zakaj uporabljati in zakaj ne) in dodajo pod komentarje. Seveda naj vsak piše iz svoje perspektive, na primer z oblikovalske plati ali na drugi strani z razvijalske plati, ali oboje če je kdo multipraktik. S tem pomagajmo nekomu, ki je pred odločitvijo ali Smarty uporabiti ali ne. Lahko pa na novo definirate tudi zlo besedo:P
Podobni članki:
- Kateri framework oz. CMS uporabiti, če sploh – PHP
- PHP setlocale (seznam držav in kode le-teh)
- Kdaj uporabiti class in kdaj id oznako za CSS selektorje
- Katero kodiranje uporabiti pri izdelavi internetnih strani?
- Poljubno 404 sporočilo – Custom 404 error not found message
- Postopek izdelave spletne strani



April 5th, 2008 ob 6:49 pm
Jaz bi raje namesto smartya uporabil kar cel framework, ki podpira MVC.
April 5th, 2008 ob 7:05 pm
Ja način je podoben, cakePHP recimo ima nekaj takega, kjer s $controler->set funkcijo nastavljaš spremenljivke, ki jih uporabiš v templatu, podobno kot Smarty assign.
April 5th, 2008 ob 7:19 pm
A se te smarty-ji uporabljajo pri CMS sismetih(nuke,fusion..)?
April 5th, 2008 ob 10:39 pm
jaz pa uporabljam kar MSC framework (Model-Smarty-Controller)
April 5th, 2008 ob 11:20 pm
glede smartyja se mnenja krešejo, moje je, da je smarty popolnoma odveč, ker:
je nekompatibilen view layer (neprenosljiva koda php-smarty pomeni, da moraš kodo prepisovati, ko logiko premikaš iz smartyja v php ali obratno),
ima nekaj featurejev, ki pa so v resnici samo rešitev za probleme, ki jih sam povzroča (npr. je prepočasen - ima pa caching),
pri kompleksnih templejtih (modifierji, parametri, ...) je obupno nepregleden,
zna enak osnovni nabor ukazov kot php, samo manj pregleden ({assign} je dober primer, ali spet recimo sintaksa klicanja modifierjev),
ko potrebuješ večjo fleksibilnost, popolnoma odpove -- ali je rezultat res obupen (veliko view logike predpripravljaš že v controllerju, torej kriviš pravila MVC paradigme), ali pa greš enostavno na php,
zadnji argument je bolj kost za zagovornike in spodbija enega njihovih glavnih argumentov in sicer, da je s smartyjem manj kode. Čeprav je enostaven smarty template res krajši od php-templejta, je skupno količina kode, ki jo mora programer spisati, še vedno večja, ker smarty zahteva predpripravo in inicializacijo. Če kaj šteje število vrstic v projektu (meni osebno to ni neko pametno merilo), potem je pure-php boljši.
Bi bilo pa zanimivo zbrati argumente obeh strani, jih čim bolj objektivno preučiti in na koncu pogledati rezultat.
April 6th, 2008 ob 12:05 am
Pa še neki, če imaš vklopljene recimo short tage, je lahko tudi tako:
...<p>{$hehe}</p>...
vs
...<p><? p($hehe); ?></p>...
kar pa več ni tako zelo hudo nepregledno in nevem kako ne... a ne ?
Jaz sem se igral malo s smatyjem pa mi ni bil preveč všeč. Meni pač ...
PS: Wordpress je tudi sucky ... prosim biriši zgornji comment
April 6th, 2008 ob 9:30 am
Smarty ne da samo loči logiko od samega izpisa ali templatov, če želiš. Ampak lahko omogoča tudi da imaš recimo stran razbito na več delov kot so footer, header, meniji, lestvice strani ... potem pa s smartijem sestavič poljubno stran. To pride v poštev pri večjih straneh ki imajo ogromno podstrani in je vsaka zase malo prilagojena. Tu pa se potem lepo lahko igraš s smartyem. Mislim da je ravno v tem največji catch.
April 6th, 2008 ob 9:34 am
Prilagam še mnenje s strani oblikovalca.
Mnenja zgoraj se nahajajo bolj iz programerskega vidika, zato dodajam še mnenje oblikovalca (HTML, CSS).
Sam, ki o PHP kodi nimam prav veliko pojma, imam veliko rajši ločeno HTML kodo, v katero potem vključim samo končno sprejemljivko. To zame pomeni bistveno preglednejša HTML koda => hitrejše delo.
V primeru TRsplet imam ločen folder z celotnimi HTML fajli za vsebino, ki jih potem lahko urejam ločeno od PHP fajlov. S tem je proces izdelave strani krajši, ker lahko istočasno dela programer in oblikovalec.
April 6th, 2008 ob 11:22 am
@cobra: večinoma jih uporablja svoj template sistem ali pure PHP. Nekateri pa tudi smarty, kot je omenil ace.
@jernej: ni ne vem kaj nepregledno, ampak je {$hehe} bolj pregledno.
@miha: Se strinjam in to rad uporabljam, zraven pa bi dodal tudi drugo stran, da tudi to lahko delaš s PHP-jem. Imaš pure PHP s footer.php, header.php.
@gasper_k: Ko postanejo templati večji se vsekakor strinjam, da se sama prednost v preglednosti izniči. Vsaj moje izkušnje.
Smarty nima manj kode, pomoje ima več, ampak dodaja preglednojšo kodo, loči prezentacijo in logiko ter enostavnjšo delo za oblikovalca s tem pa "opraviči" dodatno kodo (če je več kode).
April 6th, 2008 ob 11:43 am
Jaz uporabljam tako smarty, kot svoje template engine, ki so v bistvu pure PHP.
Konkretno Smarty uporabljamo na mojvideo.com. Samo če bi k tej fermi prišel takrat, ko se je projekt razvijal potem bi definitivno smarty-a izključil iz igre in uporabil pure PHP.
Problem je ravno kompleksnost, lahko si predstavljate kako kompleksen je view za recimo profilne strani. In je preglednost v kurcu in bi veliko raje delal v PHPju, v katerem se mi ni treba zejbavat z raznimi neumnostmi. Ravno včeraj sem recimo klel, ker v smartyju ne moreš eksplicitno podati arraya kot parameter neki funkciji (bi mogu v PHPju narediti array ga assignat v template in pol podat funkciji).
Pa se skoz me jebe, ko recimo iz razvojnega sajta prenasam spremenjene fajle na produkcijo se velikokrat zgodi da se stran potem sploh ne prikaze ali pa se prikaze samo na pol. In moras potem ali pobrisat template_c mapo ali pa se enkrat prenesti fajl in upat da bo tokrat vredu (to se dogaja, ker pac folk med tem ko ti prenasas naredi request na ta fajl in ga smarty prebere samo na pol in ga pol tut pokesira samo na pol)...
April 6th, 2008 ob 2:09 pm
"oči prezentacijo in logiko"
Tudi s php-jem se čisto lepo to loči če samo izpisuješ v templatu
Ne vidim prednosti pisanja foreach v smarty kodi ipd.
April 6th, 2008 ob 4:14 pm
jst ne uporabljam smartyja, pišem večinoma v pure php...
April 6th, 2008 ob 11:18 pm
Nekako lahko zaključimo (v grobem), da za manjše stvari (uvod-predstavitev-kontant spletne strani) je smarty dobra možnost za uporabo (če vam je stvar bolj pregledna), pri večjih stvareh pa zadeva postane preveč komplicirana in poveča čas izdelovanja ...
November 5th, 2008 ob 8:44 pm
v smarty templatih lahko pišeš tudi pure php kodo
{php}
print ('opa opa');
{/php}
na poti je pa smarty 3.0, ki bo imel KONČNO podporo za php5 in še veliko novosti in predvsem izboljšav
November 6th, 2008 ob 11:12 am
Sem mal gledal dokumentacijo, zgleda kar zanimivo.