NePo
Gruodis 6, 2007

Susipažinkime su Smarty

Š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 , 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 kodas maišytas su ? 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. 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 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 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į kodo, tam reikėtų panaudoti {}{/} tagus.

Štai ir viskas ką norėjau pasakyti, jeigu jums pritrūks standartinių galimybių, nepasikuklinkite paieškoti plugin’ų.

Panašūs straipsniai


“Susipažinkime su Smarty” komentarų: 21

  1. BaQc

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

  2. irmantas

    nu realiai beveik nenaudingas daigtas :/ tik apsunkina svetaine :D

  3. asterisk

    Irmantai, smarty turi puikią integruotą kešavimo sistemą. Nemanau ar ji tikrai apsunkina tinklalapį :)

  4. sirex

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

  5. sirex

    Ech, nukando mano kodą :)

  6. NePo

    sirex> kad tavo kodo nenukąstų, geriausia būtų jeigu jį talpintum paste.lt ir mums pateiktum tik nuorodą :)

  7. sirex

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

  8. s.

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

  9. eligijus

    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!

  10. asterisk

    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.

  11. ash

    Nu praktiskai tai smartis nelabai kur panaudojamas. Tik brangius resursus eda ir viskas, nes rasant grynu php ne ka sudetingiau viskas atrodo.

  12. Tadas

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

  13. Tomas

    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.

  14. NePo

    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

  15. Tomas

    Ačiū, o tie kiti failai kur išextraktinius iš Smarty būna nereikalingi? :)). Ačiū NePo eisiu išmeginti.

  16. Tomas

    O kodus rašyt betkur? taprasme index faile pvz betkur? o tas tpl failas kur jis smarty direktorijoj? ;>

  17. Kuriame kalendorių » Pixel.lt

    […] 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 […]

  18. Webdeveloper.lt » Blog Archive » Smarty paruošimas darbui
  19. ffs

    “Č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?

  20. Infactor

    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.

  21. Infactor

    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

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.