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
- 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
[muokkaa | muokkaa wikitekstiä]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
[muokkaa | muokkaa wikitekstiä]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 ase
$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
[muokkaa | muokkaa wikitekstiä]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
[muokkaa | muokkaa wikitekstiä]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ä
[muokkaa | muokkaa wikitekstiä]- last.fm
- bBlog
- Gallery
- TikiWiki
- XOOPS
- ATK - Achievo ToolKit (Arkistoitu – Internet Archive)
Virallinen Smarty-resurssisivu (Arkistoitu – Internet Archive).
Aiheesta muualla
[muokkaa | muokkaa wikitekstiä]- Smartyn kotisivu - virallinen sivusto.
- Lataa (Arkistoitu – Internet Archive)
- Smarty-resurssiluettelo (Arkistoitu – Internet Archive)
- Foorumi - muilla kielillä
- Smarty-Wiki (Arkistoitu – Internet Archive)
- PHP Templating with Smarty (Arkistoitu – Internet Archive) - Smarty-opas