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 Säännöllisillä lausekkeilla foreach- ja muilla toistorakenteilla Valintarakenteilla

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!-- tiedosto basic.tpl, tallennettu hakemistoon ./templates --> <html> <head> <title>{$otsikko}</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> </head>

<body>

<p>{$sisalto}</p>

</body> </html>

Toimintalogiikan hoitavassa koodissa Smarty määritellään käyttämään edellistä mallinetta:

<?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->config_dir = SMARTY_DIR; $smarty->template_dir = './template'; $smarty->compile_dir = './template/compiled'; $smarty->compile_check = TRUE; $smarty->debugging = FALSE;

// Siirretään muuttujiin haluttu sisältö $smarty->assign('otsikko', 'Tämä on otsikko!'); $smarty->assign('sisalto', 'Tämä on assign-toiminolla lisätty sisältö'); // Näytetään malline $smarty->display('basic.tpl'); ?>

Esimerkki toiston ja ehdon sisältävästä rakenteesta Seuraavassa esimerkissä on kommentti, {if ...}- ja {section...}-toistorakenne. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!-- tiedosto menu.tpl, tallennettu hakemistoon ./templates --> <html> <head> <title>{$otsikko}</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> </head>

<body> <table>

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

{section name=idx loop=$valikkotekstit} <tr><td> {if $linkit[idx] ne ''} <a href='{$linkit[idx]}'>{$valikkotekstit[idx]}</a> {else} {$valikkotekstit[idx]} <!-- väliosikko --> {/if} </td></tr> {/section} </table>

</body> </html>

Mallineen näyttävä PHP-koodi voisi olla seuraavanlainen:

<?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->config_dir = SMARTY_DIR; $smarty->template_dir = './template'; $smarty->compile_dir = './template/compiled'; $smarty->compile_check = TRUE; $smarty->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->assign('otsikko', 'Tämä on otsikko!'); $smarty->assign('linkit',$linkit); $smarty->assign('valikkotekstit',$valikkotekstit);

// Näytetään malline $smarty->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... <table> {section name=rivinro loop=$data} <tr> {section name=sarakenro loop=$data[rivinro]} <td>{$data[$rivinro][$sarakenro]}</td> {/section} </tr> {/section} {/table} ... sivu jatkuu ... </pre> Tiedot siirretään PHP:sta seuraavasti:

<pre> <?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->assign('data',$tiedot); $smarty->display('taulukko.tpl'); ?>

Smartyn avulla rakennettuja www-sovelluksia ja -ympäristöjä last.fm bBlog Gallery TikiWiki XOOPS ATK - Achievo ToolKit

Virallinen Smarty-resurssisivu .

Aiheesta muualla Smartyn kotisivu - virallinen sivusto. Lataa Smarty-resurssiluettelo Foorumi - muilla kielillä Smarty-Wiki PHP Templating with Smarty - Smarty-opas

Luokka:Ohjelmointikielet