News
Photos
Articles
Components
Applications
Kleinkunst

PHP - Template engine Smarty

Het framework van mijn website heb ik zelf ontwikkeld met PHP en de template engine Smarty. Door gebruik te maken van Smarty kon ik mijn HTML pagina's en PHP scripts mooi gescheiden houden. In dit artikel een bondig overzichtje van de basis mogelijkheden van Smarty.

Wat is Smarty ?

Smarty is een open-source template engine voor PHP. Het zorgt er voor dat je HTML pagina's (inhoud) en PHP code (logica) gescheiden kan houden. Hierdoor kan je de PHP code veel gemakkelijker onderhouden en eventueel herbruiken. Bij grote projecten heb je ook het voordeel dat een programmeur aan de PHP scripts kan werken terwijl een graficus de HTML pagina's kan maken. Bovendien heeft Smarty heel wat interesante mogelijkheden om snel HTML tabellen op te bouwen, tags te vervangen, ...

 

Installatie

De installatie bestanden moet je eerste downloaden op de website http://smarty.php.net. Hierna dien je het ZIP bestand gewoon te unzippen. Best zet je het ergens in de map van je website.

Configureren

Smarty is een PHP klasse, dus je begint met het maken van een instantie.

$smarty = new Smarty;

Voordat je een template kan gebruiken moet je Smarty vertellen waar hij de templates en configuratie bestanden kan vinden. Omdat Smarty de templates compileert moet je het ook wijs maken waar het de gecompileerde versies van de templates mag plaatsen. Dit moet een map zijn waar Smarty mag schrijven.

$smarty->template_dir = '../Test';
$smarty->compile_dir = '../Test/Smarty/templates_c/';
$smarty->config_dir = '../Test/Smarty/configs/';
$smarty->cache_dir = '../Test/Smarty/cache/';

 

HTML pagina opbouwen

Het opbouwen van een pagina kan zeer eenvoudig. Vanuit je PHP code een HTML pagina tonen kan als volgt :

$smarty->display('Test_Smarty.htm');

Tags

Het gebruik van Smarty wordt natuurlijk pas interessant als je tags kan gebruiken. Tags in je HTML pagina zien er als volgt uit :

{$TagNaam}

Deze tag opvullen vanuit je PHP script kan met de Assign method. Let wel, je moet eerst alle tags opvullen vooraleer je de Display method kan oproepen.

$smarty->assign('TagNaam','TagWaarde'); 


Tabellen

Je kan ook heel gemakkelijk tabellen opvullen. In het PHP script moet je daarvoor een array opvullen. In de HTML pagina maak je alvast 1 rij en door gebruik te maken van de section en loop tag kan Smarty de nodige rijen automatisch bijmaken.

$smarty->assign('Namen', array('Jan','Piet','An','Els'));
<table border="2" cellpadding="2" cellspacing="2">
  {section name=i loop=$Namen}
    <tr>
      <td>{$Namen[i]}</td>
    </tr>
  {/section}
</table>
Jan
Piet
An
Els

Interessanter wordt het als je multidimensionale arrays gaat gebruiken :

arrNamenLijst = array();
$arrNamenLijst[] = array('Naam' => 'Jansen', 'Voornaam' => 'Jan');
$arrNamenLijst[] = array('Naam' => 'Pieters', 'Voornaam' => 'Piet');
$arrNamenLijst[] = array('Naam' => 'Anderson', 'Voornaam' => 'An');
$smarty->assign('NamenLijst', $arrNamenLijst);
<table width="300" height="40" border="2" cellpadding="2" cellspacing="2">
  {section name=i loop=$NamenLijst}
    <tr>
      <td width="200">{$NamenLijst[i].Naam}</td>    
      <td width="100">{$NamenLijst[i].Voornaam}</td>
    </tr>
  {/section}
</table>
Jansen Jan
Pieters Piet
Anderson An


Op deze manier kan je ook zeer snel tabellen maken met data van SQL queries. Het uitvoeren van een query geeft een array en deze kan je dan meteen doorgeven aan de HTML pagina. Zie ook de PHP functies in mijn vorige artikel.

 

Keuzelijst

Op dezelfde manier kan je een keuzelijst opbouwen :

$smarty->assign('Nummers', array(1,2,3,4,5));
$smarty->assign('Namen', array('Jan','Piet','An','Els'));
<select name="select">
  {html_options values=$Nummers output=$Namen selected="3"}
</select>

 

Extra opties

Smarty heeft echter nog heel wat extra mogelijkheden.

Alternerend een andere kleur voor de rijen in je tabel kan bijvoorbeeld met de cycle values tag.

<table height="40" border="2" cellpadding="2" cellspacing="2">
  {section name=i loop=$Namen}
    <tr bgcolor="{cycle values="#eeeeee,#dddddd"}">
      <td>{$Namen[i]}</td>
    </tr>
  {/section}
</table>

Een if structuur is natuurlijk ook voorzien :

{if $Vet}
  <b>Vette tekst</b>{else}  Tekst{/if} 

 

Parameters controleren

Je kan vanuit een PHP pagina zeer eenvoudig een HTML pagina tonen d.m.v. de Display methode. Hierdoor is het zeer eenvoudig om eerst een reeks parameters te controleren en daarna pas te beslissen welke HTML pagina getoond zal worden. Met slechts 1 PHP pagina kan je dus een website bouwen die toch meerdere HTML pagina's kan tonen.

if ($error == 0) {
  $smarty->display('Test_Smarty.htm');
}
else {
  $smarty->display('Error.htm');
}

 

Conclusie

Smarty is een zeer krachtige template engine. In het begin heb je wat tijd nodig om alle mogelijkheden te bestuderen, maar nadien spaar je veel tijd bij het ontwikkelen van je webpagina's. In dit artikel heb ik de basis mogelijkheden van Smarty getoond, maar Smarty kan veel meer en in de praktijk komen veel van die extra mogelijkheden zeker van pas. Ik kan iedereen aanraden Smarty te gebruiken bij het ontwikkelen van een website met PHP.

De volledige handleiding, die je zeker eens moet doornemen, kan je terugvinden op : http://smarty.php.net/manual/en/