A Smarty Template lehetőségei
{$title} vs. <?=$title?>:
Mitől is jobb a {$title} mint az egyszerű PHP-s kiíratás? A programozó lényegében belepakolja a kiírandó adatokat egy objektumba, ami aztán behelyettesíti a sablon fájlba azokat. Ebből még nem derül ki a smarty haszna, ezért nézzük meg a grafikus lehetőségeit példakód formájában:
A grafikus alap lehetőségei:
A sablonon belül a szoveg változónak adunk értéket, ezáltal a {$szoveg} ugyanúgy használható mintha az a PHP kódból tettük volna meg:
{assign var="szoveg" value="Logout"}
A változó módosítókkal megváltoztathatjuk a kiírandó szöveget. Ilyen módosítók például az összes karaktereket nagybetűssé alakító, vagy a karakterek közé egy szóközt beszúró. Ezeket a módosítókat egy "|" karakterrel fűzhetjük a változónév után, és láncolhatjuk is őket:
{$szoveg|upper} => LOGOUT
{$szoveg|spacify} => L o g o u t
{$szoveg|upper|spacify} => L O G O U T
Tömbök és objektumok
A smartyban elérhetjük a tömbök adatait is, amik akár lehetnek többször egymásba ágyazottak is. Erre használhatjuk a hagyományos "[ ]" vagy a smarty-s megoldást is ".".
{$tomb.altomb.altombkulcs}
{$tomb[altomb][altombkulcs]}
{$tomb[0][1]}
Hasonló képpen működnek az objektumok is:
{$obj->adattag}
{$obj->metodus()}
Vezérlési szerkezetek:
Léteznek azonban vezérlési szerkezetek is a smarty-ben, mint például a ciklus és a feltétel.
Nézzünk egy példát a feltételre, köszönjünk a felhasználónak. A $username változót a PHP-ból kapjuk.
{if $username eq "admin"} Hello Admin!
{elseif $username ne ""} Hello User!
{else} Hello Guest!
{/if}
A feltétel megadásánák használhatjuk a == != > < ... operátorokat is.
A következőkben nézzünk meg egy lehetséges példát a felhasználók neveinek kilistázására egy html listában (<ul> <li>). A $felhasznalonevek tömböt a PHP kódból kapja a smarty.
<ul>
{foreach from=$felhasznalonevek item=nev}
<li>{$nev}</li>
{/foreach}
</ul>
Ez a példa kezdésnek jó, de nem éppen megfelelő, ugyanis ha üres a PHP-ból kapott tömb, akkor egy üres (<ul> </ul>) html listát kapunk. Ez önmagában nem baj, de ebből következik egy probléma: a felhasználó nem kap értesítést, hogy miért nincs kiírva semmi. Könnyen kezelhető a probléma a {foreachelse} lehetőséggel:
<ul>
{foreach from=$felhasznalonevek item=nev}
<li>{$nev}</li>
{foreachelse}
A felhasználó nevek listája üres.
{/foreach}
</ul>
Ezzel már kapunk információt, hogy miért üres a lista, de most meg a szöveg az <ul> tageken belül van. Erre adnak megoldást a smarty beépített ciklus változói. Használatukhoz nevet kell adni a ciklusnak egy name attribútum segítségével (ennek az értéke legyen most ciklus). A következő ciklusváltozók léteznek:
$smarty.foreach.ciklus.first - akkor igaz ha az első elem ciklusában vagyunk
$smarty.foreach.ciklus.last - akkor igaz ha az utolsó elem ciklusában vagyunk
$smarty.foreach.ciklus.index - a ciklus indexe, sorszáma 0-tól kezdve.
Na akkor kombózzuk össze ezt egy már jónak mondható, bár első látásra nem egyszerű kódba:
{foreach from=$felhasznalonevek item=nev name=ciklus}
{if $smarty.foreach.ciklus.first}
<ul>
{/if}
<li>{$nev}</li>
{if $smarty.foreach.ciklus.last}
</ul>
{/if}
{foreachelse}
A felhasználó nevek listája üres.
{/foreach}
Itt egy másik példa arra ha a kiírandó szövegeket egy vízszintes vonallal szeretnénk elválasztani úgy, hogy az első előtt és az utolsó után ne legyen. Használjuk erre a PHP-ből kapott cikklista tömböt, és írassuk ki egymás után vonallal elválasztva a cikkek bevezetőjét.
{foreach from=$cikklista item=cikk name=ciklus}
{if !$smarty.foreach.ciklus.first}
<hr/>
{/if}
{$cikk.bevezeto}
{/foreach}
A programozó lehetőségei:
A programozó a Smarty alapszolgáltatásain kívül írhat hozzá plugineket. Ezeknek három csoportja van: a funkciók, a módosítók és a szűrők. Ez utóbbi további három részre bontható: fordítás előtti-, fordítás utáni- és kimeneti szűrők léteznek. A szűrőket használat előtt be kell tölteni. Előszűrő lehet egy html megjegyzéseket eltávolító szűrő, utószűrő lehet, az amikor egy bizonyos részt mindig be akarunk illeszteni egy oldalba. Kimeneti szűrőre jó példa az email címek védelme az adathalászat ellen, a kukac karakter helyére mást illeszt be.
A cikk még nem ért véget, kérlek, lapozz!