Initiation aux templates en PHP avec Smarty


prcdentsommairesuivant

IV. Les fonctions natives

La comprhension des fonctions Smarty est indispensable, en effet c'est grce aux fonctions que vous allez pouvoir rpter une portion de code, insrer du code en fonction de certaines conditions, insrer du javascript dans vos templates et bien d'autres choses encore.

Les fonctions s'utilisent entre accolage ex: {section}. Comme en html avec les balises, toute dclaration de fonction s'accompagne d'une balise de "fermeture". Pour la fonction {section} on utilisera par exemple {/section}.

IV-A. Section

Cette fonction essentielle est peut-tre la premire qui m'a fait prendre conscience du potentiel de Smarty.

Section vous permet d'afficher une portion de code HTML autant de fois qu'il y a d'lments dans le conteneur qui lui a t indiqu. C'est en fait strictement la mme chose qu'une boucle, gardez toujours a l'esprit. Pour que tout cela fonctionne, il faut donc avoir pass Smarty un conteneur de donne (tableau ou objet) et lui se charge du reste.

Vous devez spcifier au moins deux arguments: LOOP qui est la variable Smarty (tableau ou objet assign en PHP) et un attribut NAME dont la valeur reprsente le nom de la SECTION. La valeur de NAME est comme un index que nous utiliserons dans la fonction pour accder l'lment courant, aller un exemple:

section.php
Sélectionnez
// Inclure la librairie smarty
require_once('../smarty/Smarty.class.php');
 
// Instancier l'objet smarty
$oSmarty = new Smarty();
 
$aMonTableau = array("Jean", "Jean-Luc", "Sylvain", "Eric");
 
// 2. Recensement dans smarty de la variable $aMonTableau
$oSmarty->assign('smarty_tableau', $aMonTableau);
 
// 3. Affichage du template aprs passage de l'objet
$oSmarty->display('section.tpl');

Jusqu'ici, rien de particulier, la nouveaut se trouve dans le template:

section.tpl
Sélectionnez
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
	<head>
		<title>La fonction section</title>
	</head>
	<body>
		<h2>La fonction section</h2>
		<ul>
			<!--Bloc rpt autant de fois qu'il y aura d'lments dans '$smarty_tableau'-->
			{section name=idx_smarty_tableau loop=$smarty_tableau}
				<li>{$smarty_tableau[idx_smarty_tableau]}</li>
			{/section}
		</ul>      
	</body>
</html>
Section

IV-B. If, else, elseif

Tout comme en PHP, Smarty offre dans ses templates la possibilit d'afficher du contenu en fonction de certaines conditions dfinies par le dveloppeur (ou le graphiste) dans le fichier de template. Prenons l'exemple de la gestion d'un profil "administrateur" o certains lments ne doivent pas tre affichs dans certains cas. On pourra tester l'existence ou la valeur d'une variable pour dterminer que la portion de code concerne doit ou ne doit pas s'afficher

On dclarera la fonction "IF" de cette faon {if ma_condition}mon code...{/if}. Dans le cas du {IF}, l'argument (ma_condition) est la condition que l'on souhaite valuer (galit, diffrence, ngation...). Un exemple:

if.php
Sélectionnez
// Inclure la librairie smarty
require_once('../smarty/Smarty.class.php');
 
// Instancier notre objet smarty
$oSmarty = new Smarty();
 
$userIsAdmin = 'true';
 
// 2. Recensement dans smarty
$oSmarty->assign('smarty_userIsAdmin', $userIsAdmin);
 
// 3. Affichage du template aprs passage de l'objet
$oSmarty->display('if.tpl');

Ici encore rien de particulier ct PHP, c'est la partie TEMPLATE qui est concerne, dans cet exemple, on teste la valeur d'une variable Smarty concernant les droits d'un utilisateur.

if.tpl
Sélectionnez
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
	<head>
		<title>Fonctions IF/ELSE/ELSEIF</title>
	</head>
	<body>
		<h2>Les fonctions IF/ELSE/ELSEIF</h2>
 
		{if $smarty_userIsAdmin == 'true'}
			<div>Salut administrateur</div>
		{else}
			<div>Salut utilisateur lambda !!</div>
		{/if}
 
	</body>
</html>

IV-C. Literal

Literal vous permet de dsactiver un temps l'interprtation Smarty. Cela permet notamment l'insertion de scripts JAVASCRIPT qui gnrerent habituellement des erreurs (entre autre cause des accolades).

En effet le fichier de template suivant gnre une erreur:

sansLiteral.tpl
Sélectionnez
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
	<head>
	<title></title>
	</head>
	<body>
		<script language="JavaScript" type="text/javascript">
			function test () {
				alert('Bonjour le monde !!');
			}
		</script>
	</body>
</html>

Fatal error: Smarty error: [in index.tpl line 10]: syntax error: unrecognized tag: alert('Bonjour le monde !!'); (Smarty_Compiler.class.php, line 439) in C:\Program Files\wamp\www\demos\smarty\lib_smarty\Smarty.class.php on line 1095

En utilisant la fonction {LITERAL}, c'est dire en entourant le script javascript ou la C.S.S. concern, cela ne posera plus de problme:

avecLiteral.tpl
Sélectionnez
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Literal</title>
	</head>
<body>
	{LITERAL}
	<script language="JavaScript" type="text/javascript">
		function test () {
		alert('Bonjour le monde !!');
	}
	</script>
	{/LITERAL}
</body>
</html>

IV-D. Include

Cette fonction permet d'appeler dans un template un autre template, dans la mme ide qu'un include() PHP. Cela permet de dcoupler encore plus la prsentation. Nous allons voir dans l'exemple suivant le cas d'une zone principale et d'un "HEADER".

include.php
Sélectionnez
require_once('../smarty/Smarty.class.php');
 
// Instancier l'objet smarty
$oSmarty = new Smarty();
 
$oSmarty->assign('header_text', "Ceci est l'entte de ma page !!!");
$oSmarty->assign('main_text', "Ceci est la zone principale de ma page !!!");
 
// 3. Affichage du template aprs passage de l'objet
$oSmarty->display('include.tpl');

Le fichier de template que l'on va inclure:

header.tpl
Sélectionnez
<div id="header" style="background-color:teal;">
	<h1>{$header_text}</h1>
</div>

Voyons maintenant le template qui prend en charge l'inclusion (ici du template header.tpl)

include.tpl
Sélectionnez
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
	<head>
		<title>Exemple d'include</title>
	</head>
	<body>
		{include file="header.tpl"}
		<div id="main" style="background-color:#6699cc;">
			<h1>{$main_text}</h1>
		</div>
	</body>
</html>
Image non disponible

Dans le template inclu on peut utiliser sans problme les variables Smarty.


prcdentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2008 Eric POMMEREAU. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.