T&R splet blog o spletnih storitvah. Razgaljamo tehnologijo!

reference spletnih strani
5th April

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:

PHP:
  1. $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

PHP:
  1. <?php echo $title; ?>

... 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:

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

Deli s skupnostjo:

  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Podobni članki:

  1. Kateri framework oz. CMS uporabiti, če sploh – PHP
  2. PHP setlocale (seznam držav in kode le-teh)
  3. Kdaj uporabiti class in kdaj id oznako za CSS selektorje
  4. Katero kodiranje uporabiti pri izdelavi internetnih strani?
  5. Poljubno 404 sporočilo – Custom 404 error not found message
  6. Postopek izdelave spletne strani

15x komentirano na “PHP Smarty – zlo ali nebesa – uporabiti ali ne?”

  1. Bloganje je napisal:

    Jaz bi raje namesto smartya uporabil kar cel framework, ki podpira MVC.

  2. Roky je napisal:

    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.

  3. Cobra je napisal:

    A se te smarty-ji uporabljajo pri CMS sismetih(nuke,fusion..)?

  4. ace je napisal:

    jaz pa uporabljam kar MSC framework (Model-Smarty-Controller)

  5. gasper_k je napisal:

    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.

  6. Jernej je napisal:

    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

  7. Miha je napisal:

    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.

  8. Antony je napisal:

    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.

  9. Roky je napisal:

    @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).

  10. Jan Hančič je napisal:

    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)...

  11. arjan_t je napisal:

    "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.

  12. Boštjan je napisal:

    jst ne uporabljam smartyja, pišem večinoma v pure php...

  13. Roky je napisal:

    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 ...

  14. Bujaka je napisal:

    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

  15. Roky je napisal:

    Sem mal gledal dokumentacijo, zgleda kar zanimivo.

Dodaj komentar