Smarty 3 apžvalga

Lapkritis15

Žymės: php,smarty

Pasidalink

Smarty

Po beveik 2 metus (2008-12-16 - 2010-11-12) trukusio programavimo, buvo išleista 3 PHP šablonų variklio „Smarty“ versija.

Sistema buvo perrašyta iš pagrindų, pritaikyta PHP 5 versijai, buvo sukurtas naujas sintaksės nagrinėjimo variklis (parser), pagerėjo sistemos darbo našumas, šiek tiek pasikeitė šablonų sintaksė.

Nors egzistuoja kontraversiškos nuomonės, reikalingas PHP kalbos šablonų variklis ar ne, „Smarty“ suteikia papildomas galimybes atskiriant prezentacijos logiką nuo programos logikos. Be to, techniniams dizaineriams, nemokantiems PHP kalbos, dirbti su „Smarty“ gali būti patogiau, saugiau ir produktyviau.

Smarty 3 sintaksė šiek tiek pasikeitė nuo 2 versijos, todėl seni šablonai gali neveikti, ypač jei jie buvo parašyti su klaidomis. 3 versija į sintaksės klaidas žiūri griežčiau, tačiau turi papildomų galimybių.

Kas pasikeitė Smarty 3 versijos šablonų sintaksėje nuo 2 versijos:

Atsisakyta {ldelim} ir {rdelim}

2 versijoje norint naudoti { ir } simbolius šablone (pvz.: rašant Javascript funkcijas) juos reikdavo pakeisti {ldelim} ir {rdelim} simboliais arba rašyti tekstą tarp {literal} ir {/literal}. Dabar to daryti nebereikia, tačiau rašant kintamuosius ar funkcijas nebegalima palikti tarpų tarp skirtukų, pvz,: { $foo } ir išves tokį tekstą, o ne kintamojo reikšmę.

Masyvų modifier'is

2 versijoje norint modifier'iui perduoti visą masyvą, o ne atskirus jo elementus, reikdavo pridėti @ simbolį, pvz.: {$masyvas|@count}. Dabar visas masyvas perduodamas modifier'iui, pvz.: {$masyvas|count}.

{php} žymės

Standartiškai {php} žymės 3 versijoje yra uždraustos. Jas galima įjungti nurodant $smarty->allow_php_tag = true;

Kabutės parametruose

2 versijoje kabutės parametruose buvo nebūtinos, tačiau 3 versijoje jas naudoti būtina, pvz.: {include file="/kelias/iki/sablono.tpl"}

Visi pakeitimai, nesuderinami su „Smarty“ 2 versija.

Taip pat buvo padaryti pakeitimai, palengvinantys darbą su duomenimis:

Išplėstas {foreach} funkcionalumas

3 versijoje galima naudoti tokią {foreach} sintaksę:

{foreach $masyvas as $reiksme}

{$reiksme}

{/foreach}

Taip pat palengvintas ciklo savybių gavimas, pvz.:

{$reiskme@key} - masyvo raktas

{$reiksme@iteration} - ciklo iteracija

{$reiksme@total} - visas masyvo elementų kiekis

{$reiksme@first}, {$reiksme@last} - grąžina true, jei elementas pirmas/paskutinis. Patogu naudoti sąlygos sakiniuose

2 „Smarty“ versijoje šios savybės buvo pasiekiamos per {$smarty.foreach.<ciklo vardas>.<savybė>}

{strip} blokas

Naudojant {strip} ir {/strip} galima nurodyti, jog visas output'as šiame bloke bus rašomas vienoje eilutėje, pašalinant tarpus, naujas eilutes ir kt. whitespace simbolius.

„Smarty“ 3 versijoje taip pat atsirado šablonų paveldėjimas, funkcijų kūrimas pačiuose šablonuose ir kt. Taip pat šis tas pasikeitė PHP pusėje, pvz.: dabar norint paveldėti Smarty klasę, reikia iškviesti tėvinį konstruktorių - parent::__construct();

Pilna „Smarty“ 3 versijos apžvalga smarty.net tinklalapyje.

Komentarai

Irmantas (2010-11-15 15:52:35)
Gaila pats neparašei, ar pats naudoji ir rekomenduoji naudoti. O aš tai nesuprantu kam reikalingi šitie šablonų varikliai, naudos jie realios neatneša, prezentaciją nuo logikos gal ir atskiria, bet saugumo nepadidina, juolab, kad yra galimybė rašyti php kodą. Ir be visa to reikia papildomai interpretuoti failiukus, kas kainuoja laiko ir serverio resursų.
OpenID Paulius (2010-11-15 16:26:29)
Plačiau apie „Smarty“, filosofiją, kas jis yra, kaip veikia etc.: http://www.smarty.net/about_smarty

Aš pats naudoju ir kol kas neplanuoju pereit prie kažko kito.
Suprantu ideologiją, kad PHP pats tarsi šablonų sistema, tačiau man Smarty su savo galimybėmis (ypač plugin'ais), suteikia daugiau lankstumo.
Be to, skaityti „Smarty“ sintaksę man paprasčiau nei sumaltą HTML ir PHP kodą.
Performance'o atžvilgiu jis nėra labai rajus resursams, nes jis sugeneruoją analogišką PHP skriptą, kurį įvykdo. O šablono parse'inimas production environment'e visada išjungtas, todėl šioje vietoje overhead'o nėra.
Dėl saugumo, rašiau, kad 3 versijoje standartiškai PHP tag'as yra atjungtas, tačiau esant reikalui jį galima įjungti.

Dar sykį atkreipiu dėmesį į tai, kad patiems programuotojams itin didelio patogumo jis gali ir nesuteikti, tačiau tech. dizaineriams kur kas paprasčiau žinoti elementarią „Smarty“ sintaksę, nei PHP. Tai labai svarbu dirbant komandoje, kur programuotojas programuoja aplikacijos logiką, o tech. dizaineris - prezentacijos.
Algimantas (2010-12-04 16:55:05)
Irmantui: Skirtumas tarp php šablonų ir Smarty neesminis. Vienais atvejais Smarty truputį geriau, kitais atvejais - php. Kiekvienas renkasi pagal poreikius.

Man patiko Smarty 3 kintamųjų filtrai (saugu), cikluose {$reiksme@iteration} (patogu).

Smarty 3 saugu leisti redaguoti svetainių administratoriams per TVS?



(Tinklalapis arba OpenID)