Šis straipnis skirtas tiems, kurie ruošiasi žengti pirmuosius žingsius į šablonų pasaulį. Kažkada vien išgirdus terminą “template”, man pašiurpdavo oda. Bet gyvenimas tuo ir nuostabus, kad nestovi vietoje. Mokiniesi, tobulėji, daliniesi savo patirtimi su kitais.
Taigi, jeigu dar neteko girdėti termino Smarty, tai greičiausiai jau supratote, kad tai yra vienas iš šablonų varikliukų. Tikrai ne vienintelis, todėl nepulsiu šiame straipsnyje neįrodinėti, kad jis geriausias.
Visų pirma, kodėl jums gali reikėti šablonų? Atsakymas labai paprastas: jums dar neatsibodo PHP kodas maišytas su HTML? Nenusibodo, jog norėdami pakeisti tinklalapio dizainą, netyčia galite ištrinti pusę puslapio logikos? O galbūt jūs dizaino išvis nekeičiate?
Šablonai būtent tam ir skirti, kad būtų mažiau galvos skausmo. Ir, žinoma, jeigu esate MVC šalininkas, be šablonų tikrai neišsiversite.
Užteks įžangos, pereikime prie darbų.
Pirmiausia viską reikia parsisiųsti iš oficialaus puslapio, išarchyvuoti ir libs direktoriją perkelti į savo projektą. Tuomet nustatyti konfigūraciją. Kadangi tai pavyzdys, tai aš viską nustatysiu index.php faile
$basedir=dirname(__FILE__); require($basedir.'/smarty/Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = $basedir.'/smarty/templates'; $smarty->compile_dir = $basedir.'/smarty/templates_c'; $smarty->cache_dir = $basedir.'/smarty/cache'; $smarty->config_dir = $basedir.'/smarty/configs';
Tiesa, visas keturias direktorijas (templates, templates_c, cache, configs) jums patiems reikės sukurti, o jeigu dirbate ne Windows sistemoje nepamirškite pakeisti teisių į 777.
Taigi jau turime konfigūraciją, todėl galime parašyti šiek tiek kodo.
Pradėkime nuo paprasto kintamojo priskyrimo:
$smarty->assign('pageContent', $action); $smarty->display('index.tpl');
Tiek masyvų, tiek paprastų kintamųjų priskyrimas yra vienodas. Antroje eilutėje nurodome kur norime išvesti informaciją.
Tarkime, kad $action buvo paprastas kintamasis, tuomet jį išvestume taip:
<div id='kazkas'>
{$pageContent};
</div>O jeigu $action būtų masyvas, tai išvedimas šiek tiek sudėtingėja
<table>
<tr>
<td>Vardas</td>
<td>Pavarde</td>
</tr>
{foreach from=$allList item=listItem}
<tr >
<td>{$listItem.username}</td>
<td>{$listItem.usersurname}</td>
</tr>
{/foreach}
</table>Čia reikia atkreipti dėmesį į tai, kad Smarty neturi tikrų ciklų, tik šitas vienintelis foreach, todėl gerai apdorokite savo logiką ir tik tuomet išveskite informaciją.
Jeigu jau prakalbom apie ciklus, negalima pamiršti sąlygos sakinių:
{if $pageContent==1}
{include file="users/users.tpl"}
{elseif $pageContent==2}
{include file="users/newuser.tpl"}
{/if}Atkreipkite dėmesį, jog tiek ciklai, tiek sąlygos sakiniai privalo būti uždaryti baigiamuoju žodžiu.
Štai išsiaiškinome visą esmę, paprasta ar ne?
Tokiu atveju dar keletas naudingų tipsų:
{foreach from=$allList item=listItem}
<tr bgcolor="{cycle values="#DEB887,#FFDEAD"}">
<td>{$listItem.username}</td>
</tr>
{/foreach}Funkcija cycle, žaisdama su dvejomis reikšmėmis nudažys vieną eilutę pirma spalva, o kitą - antra. Ir neapsiribokite tik dvejomis spalvomis.
Jeigu Smarty kada nors teks rašyti javascript kodą apskliauskite jį {literal}{/literal} tagais. Ir jeigu netyčia, atleisk Gykų Dieve už nuodėmę ir apsaugok mus nuo kodinimo asembleriu, jums reikėtų padaryti labai nedorą dalyką ir į šabloną įrašyti truputį PHP kodo, tam reikėtų panaudoti {php}{/php} tagus.
Štai ir viskas ką norėjau pasakyti, jeigu jums pritrūks standartinių Smarty galimybių, nepasikuklinkite paieškoti plugin’ų.
2007-12-06 | 14:25
Na gal kiek skystokai…
Ciklas ne tik foreach yra, nepamirst reikia ir section.
Na norinciam ka nors daugiau suprast, teks panarsyt ir manuale.
Beje, yra kazkoks puslapis lietuviskas, kur 3 ar 5 straipsniais apie smarty, kurie gan issamus ir pakankami pradinukams. Nebeatsimenu adreso tik :-/
2007-12-06 | 16:33
nu realiai beveik nenaudingas daigtas :/ tik apsunkina svetaine :D
2007-12-06 | 16:48
Irmantai, smarty turi puikią integruotą kešavimo sistemą. Nemanau ar ji tikrai apsunkina tinklalapį :)
2007-12-06 | 22:42
Sviestas sviestuotas :) Koks tikslas PHP kalbai kurti šablonų variklius, kai pati PHP kalba yra šablonų variklis.
{foreach from=$allList item=listItem}
{$listItem.username}
{$listItem.usersurname}
{/foreach}
Yra lygiai tas pats kaip:
usrename?>
usersurname?>
Ansrasis variantas veiks kokių 100 kartų greičiau, o ir galimybių daug daugiau, nei smartis gali pasiūlyti. Ir nereikia aprašinėti visokių $smarty->assign(’pageContent’, $action); dirbama su paprasčiausiai PHP kintamaisiais.
Nereikia išradinėti dviračio :)
2007-12-06 | 22:43
Ech, nukando mano kodą :)
2007-12-07 | 8:09
sirex> kad tavo kodo nenukąstų, geriausia būtų jeigu jį talpintum paste.lt ir mums pateiktum tik nuorodą :)
2007-12-07 | 9:42
Štai nuorodos į paste.lt:
http://www.paste.lt/paste/b34b9aa2e99f04f232c921060fe37989
http://www.paste.lt/paste/f576577d37dd21763896741b78b6fb88
Būtų gerai, kad HTML tagų neiškarpytų, o pakeistų į atitinkamus HTML special charecterius.
2007-12-07 | 12:03
“Čia reikia atkreipti dėmesį į tai, kad Smarty neturi tikrų ciklų, tik šitas vienintelis foreach, todėl gerai apdorokite savo logiką ir tik tuomet išveskite informaciją.” - sveikinu vienu sakiniu pristačius 2 šokiruojančius išradimus: su “netikrų” netikrų ciklų egzitavimu dar galėčiau susitaikyti, bet “savosios logikos apdorojimas” jau pernelyg metafiziškas iššūkis. Nusprendžiau užaugęs netapti programuotoju.
2007-12-07 | 23:51
Teisiu 777 saugokites kaip velnias kryziaus!
Rasymo teises savininkui visada reikalingos (gali pasitaikyti atveju ir kai nereikalingos)
Rasymo teises grupei reikalingos daznai, bet ne visada (priklauso nuo serverio konfiguracijos)
Rasymo teises kitiems (others) reikalingos tada, kai blogai sukonfiguruotas serveris!
Todel pries pasirinkdami rasymo teises, geriau paeksperimentuokite!
2007-12-08 | 11:36
Sirex, iš dalies tu teisus, aš šiuo metu “templatams” taip pat naudoju PHP. Tik reikia turėti gerą cache sistemą, jog atsipirktų smarty NEnaudojimas. Beja <?=$blablabla?> nėra visiškai gerai naudoti, nes ne visi serveriai palaiko short tags, nebent sistema bus asmeniniame ir būtent tam projektui pritaikytame serveryje.
2007-12-09 | 18:06
Nu praktiskai tai smartis nelabai kur panaudojamas. Tik brangius resursus eda ir viskas, nes rasant grynu php ne ka sudetingiau viskas atrodo.
2007-12-10 | 11:45
Caches yra gerai, taciau dabar webai tokie, kad viskas veikia realiu laiku, o Smarty gali pasiulyti tik visiska puslapio cachavima. Taip pat Smarty neapsirasysi masyvo. As asmeniskai ji naudojau 2 metus ir teko pereit prie paprasto PHP naudojant ivarius helperius :)
2008-01-05 | 1:18
Esu visiškas naujokas, tad nelabai supratau tas kategorijas sukurt kokiam folderi libs? :) ar kur beje kaip suprasti ikelti svetaine, tipo sukelti failus ten index.php style.css ir kitus? beto kur reikia rašyt “ta koda” nesupratau irgi. Ačiū jei kas pasakysite.
Tomas.
2008-01-05 | 11:49
Kai parsisiunti smarty tai ko tau reikia būna libs direktorijoje
visą ją persikopijuoji pas save į projektą ir pavadini kaip nori
tarkim būtų tokia struktūra
svetaine/
->index.php
->libs/
šiuo atveju libs direktoriją aš pavadinau smarty.
libs direktorijoje reikia sukurti kas keturias kurias paminėjau straipsnyje.
Kodas kuris spalvotas yra rašomas php failuose, šiuo atveju index.php
Kodas kuris yra nespalvotas rašomas .tpl failuose tarkim tai galėtų būti index.tpl
2008-01-05 | 20:46
Ačiū, o tie kiti failai kur išextraktinius iš Smarty būna nereikalingi? :)). Ačiū NePo eisiu išmeginti.
2008-01-05 | 21:05
O kodus rašyt betkur? taprasme index faile pvz betkur? o tas tpl failas kur jis smarty direktorijoj? ;>
2008-02-22 | 8:48
[…] smarty, bet tikiuosi jūs tą galite puikiai padaryti be mano pagalbos, o jeigu ne, tai pasiskaitykite čia. Ir paskutinis punktas iki laimės - pasirašyti šiek tiek smarty kodo: {foreach from=$days […]
2008-03-09 | 15:07
[…] http://pixel.lt/susipazinkime-su-smarty.html […]
2008-03-28 | 20:14
“Čia reikia atkreipti dėmesį į tai, kad Smarty neturi tikrų ciklų, tik šitas vienintelis foreach, todėl gerai apdorokite savo logiką ir tik tuomet išveskite informaciją.”
o tai kas per geris tada section loop?
2008-04-02 | 11:19
Section ciklas turi papildomus parametrus nei foreach, tokius kaip:
start - nuo kurio masyvo elemento bus pradedamas vykdyti ciklas;
step - kas kelintą kartą vykdyti ciklą, tarkime jei nurodėme step=2, tai ciklas ims kas antrą masyvo elementą;
max - galime nurodyti skaičių, kuris nutrauks ciklo vykdymą, pasiekus tam skaičiui.
2008-04-06 | 18:27
Pabandžiau pratestuot php užkrovimo greitį su smarty ir be smarty varikliuko, skirtumas akivaizdus.
Su smarty:
index.php failas: http://pastebin.com/f2c37977f
index.tpl failas: http://pastebin.com/f4e8dcca2
Greitis prieš kešavimą: ~0.0247 s
Greitis po kešavimo: ~0.0068 s
Be smarty:
index.php failas: http://pastebin.com/ff0d7a80
Greitis: 0.0001 s