Smarty

Smarty on PHP-kielellä kirjoitettu mallinejärjestelmä. Smarty erottaa PHP:n ja HTML:n toisistaan ja sen tarkoitus on lähinnä tuottaa HTML-sisältöä,
erillisten "Smarty-tarkkeiden" ja näytönohjauslogiikan avulla.
Sallittuja tarkkeita ovat esimerkiksi muuttujat kuten {$muuttuja} ja joukko loogisia ja
ohjausoperaattoreita, kuten {if}...{else}...{/if}.
Smartya käytetään useimmiten PHP-sovelluksissa erottamaan toimintalogiikka esityslogiikasta.
Tämän avulla koodi saadaan selkeämmäksi ja helpommin muokattavaksi. Sovelluksen ulkoasua on
varsin helppo muuttaa koskematta varsinaiseen toimintalogiikkaan tai PHP-koodiin. Smarty on kuitenkin
yleispätevämpi ja sillä voi generoida tarvittaessa muitakin kieliä kuin HTML:ää.
Smarty mahdollistaa näyttölogiikan ohjaamisen
ja monella muulla tavalla. Myös monet muut mallinejärjestelmät tukevat vastaavia toimintoja.
Käännetyt mallineet.
Smarty poikkeaa useista muista PHP-mallinejärjestelmistä siten, että Smarty tarkastaa aina mallineen
lukiessaan, onko siitä saatavilla tuore käännetty versio. Jos tällaista ei löydy, Smarty kääntää
mallineen puhtaaksi PHP-koodiksi ja sijoittaa koodin käännetyt-hakemistoon. Jos tuore käännetty
versio taas löytyy, Smarty käynnistää sen. Näin malline toimii erittäin nopeasti, koska PHP:n ei tarvitse
suorittaa lukuisia etsi-korvaa -toimintoja sijoittaessaan sisältöä muuttujiin. Myös ohjausrakenteet
(toistot, ehtorakenteet) kääntyvät optimoiduksi PHP-koodiksi.
Smartyssa on myös lukuisia laajennuksia, esimerkiksi select_date, joka luo halutulla tavalla
esitetyn päiväyskentän pudotuslistojen avulla. Laajennusten rakenne on yksinkertainen ja niitä on helppo
laatia lisää.
Alkeisesimerkki.
Koska Smarty erottaa PHP HTML:stä, tarvitaan kaksi tiedostoa. Luodaan aluksi malline basic.tpl
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt;
&lt;!-- tiedosto basic.tpl, tallennettu hakemistoon ./templates --&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;title&gt;{$otsikko}&lt;/title&gt;
 &lt;meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;{$sisalto}&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
Toimintalogiikan hoitavassa koodissa Smarty määritellään käyttämään edellistä mallinetta:
&lt;?php
// basic.php
define('SMARTY_DIR', 'smarty-2.6.9/' );
require_once(SMARTY_DIR . 'Smarty.class.php');
// luodaan Smarty-olio ja alustetaan se
$smarty = new Smarty;
$smarty-&gt;config_dir = SMARTY_DIR;
$smarty-&gt;template_dir = './template';
$smarty-&gt;compile_dir = './template/compiled';
$smarty-&gt;compile_check = TRUE;
$smarty-&gt;debugging = FALSE;
// Siirretään muuttujiin haluttu sisältö
$smarty-&gt;assign('otsikko', 'Tämä on otsikko!');
$smarty-&gt;assign('sisalto', 'Tämä on assign-toiminolla lisätty sisältö');
// Näytetään malline
$smarty-&gt;display('basic.tpl');
Esimerkki toiston ja ehdon sisältävästä rakenteesta.
Seuraavassa esimerkissä on kommentti, {if ...}- ja {section...}-toistorakenne.
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt;
&lt;!-- tiedosto menu.tpl, tallennettu hakemistoon ./templates --&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;title&gt;{$otsikko}&lt;/title&gt;
 &lt;meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /&gt;
&lt;/head&gt;
&lt;body&gt;
 &lt;table&gt;
 käydään läpi taulukon 'valikkotekstit' kaikki alkiot ja
 käytetään indeksinä muuttujaa 'idx', jolla voidaan poimia
 myös muiden saatujen synkronistan taulukoiden alkioita
 &lt;tr&gt;&lt;td&gt;
 &lt;a href='{$linkit[idx]}'&gt;{$valikkotekstit[idx]}&lt;/a&gt;
 {$valikkotekstit[idx]} &lt;!-- väliosikko --&gt;
 &lt;/td&gt;&lt;/tr&gt;
 &lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
Mallineen näyttävä PHP-koodi voisi olla seuraavanlainen:
&lt;?php
// basic.php
define('SMARTY_DIR', 'smarty-2.6.9/' );
require_once(SMARTY_DIR . 'Smarty.class.php');
// luodaan Smarty-olio ja alustetaan se
$smarty = new Smarty;
$smarty-&gt;config_dir = SMARTY_DIR;
$smarty-&gt;template_dir = './template';
$smarty-&gt;compile_dir = './template/compiled';
$smarty-&gt;compile_check = TRUE;
$smarty-&gt;debugging = FALSE;
// Luodaan rinnakkaiset taulukot linkit/tekstit, tyhjä linkki tarkoittaa väliotsikkoa
$linkit=array(",'http://fi.wikipedia.org','http://www.google.com','http://www.php.net');
$valikkotekstit = array('Päävalikko','Wikipedia','Google','PHP-ohjelmointikieli');
// Siirretään muuttujiin haluttu sisältö
$smarty-&gt;assign('otsikko', 'Tämä on otsikko!');
$smarty-&gt;assign('linkit',$linkit);
$smarty-&gt;assign('valikkotekstit',$valikkotekstit);
// Näytetään malline
$smarty-&gt;display('menu.tpl');
Sisäkkäiset toistorakenteet.
Toistorakenteet pääsevät oikeuksiinsa esimerkiksi näytettäessä tietokannasta haettuja rivejä.
Seuraava toistorakenne näyttää kaikki HTML-taulukossa kaikki rivit ja luo automaattisesti
oikean määrän sarakkeita:
... sivun alku...
&lt;table&gt;
 &lt;tr&gt;
 &lt;td&gt;{$data[$rivinro][$sarakenro]}&lt;/td&gt;
 &lt;/tr&gt;
... sivu jatkuu ...
&lt;/pre&gt;
Tiedot siirretään PHP:sta seuraavasti:
&lt;pre&gt;
&lt;?php
 // kantayhteys avattu, kysellään tietoja
 $kysely = "SELECT * FROM asiakas ORDER BY nimi";
 $tulos = mysql_query($kysely);
 // luodaan tiedoista kaksiulotteinen taulukko
 while($rivi=mysql_fetch_row($tulos){
 foreach($rivi as $arvo]{
 $tiedot[][] = $tieto;
 // smarty-olio luotu aiemmin... siirretään tiedot oliolle
 $smarty-&gt;assign('data',$tiedot);
 $smarty-&gt;display('taulukko.tpl');
Smartyn avulla rakennettuja www-sovelluksia ja -ympäristöjä.
Virallinen Smarty-resurssisivu .