| auteur : Eric POMMEREAU |
Smarty est un système (ou moteur) de
templates
utilisable avec PHP
4 ou PHP 5.
L'intérêt principal de Smarty réside dans la séparation du
contenu et de la forme. Le concept d'un système de templates
en général et de Smarty en particulier est de réserver les
tâches de production des données à PHP et de mettre le code
de présentation ( HTML
en l'occurrence) dans des templates ou modèles, un fichier
que l'on suffixera par .TPL.
|
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU | Installer les sources de Smarty sur un serveur web
-
N'oubliez pas, lors de l'installation, que Smarty peut
potentiellement être utilisé dans plusieurs scripts voire
dans plusieurs projets différents. Les sources pourront,
par exemple, être placées à la racine du serveur web.
-
Ensuite créer deux répertoires templates et
templates_c dans le répertoire du projet, ou
ailleurs (dans ce cas il faudra le spécifier dans le
script PHP qui utilise Smarty)
-
Attention le répertoire templates_c doit être
accessible en écriture pour le serveur web !!
Utiliser Smarty dans un script PHP
-
Dans un premier temps il faut créer le fichier de
templates
dans le répertoire templates/
-
Ensuite, dans le script PHP qui pilote Smarty (par
exemple: index.php), il faut inclure le fichier
Smarty.class.php (présent dans le répertoire libs/
des sources de Smarty)
-
Si les répertoires templates/ et templates_c/
ne sont pas dans le répertoire du script PHP alors il faut
indiquer leur emplacement avec les propriétés templates_dir
pour templates et compil_dir pour templates_c
- Déclarer l'objet Smarty
-
Recenser une variable Smarty avec la
méthode
assign()
-
Provoquer l'affichage avec la méthode display()
du fichier de templates
- Pour finir, tester en appelant le script PHP
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU | Script php |
require_once('../smarty/Smarty.class.php');
$oSmarty = new Smarty();
$une_chaine = "C'est génial smarty";
$un_entier = 33;
$oSmarty->assign('smarty_une_chaine', $une_chaine);
$oSmarty->assign('smarty_un_entier', $un_entier);
$oSmarty->display('exemple.tpl'); |
Fichier exemple.tpl | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Test smarty</title>
</head>
<body>
<h1>Test smarty</h1>
<ul>
<li>une chaine: <span style="color:red;">{$smarty_une_chaine}</span></li>
<li>un entier: <span style="color:red;">{$smarty_un_entier}</span></li>
</ul>
</body>
</html> |
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU |
Dans la partie PHP on déclare le tableau indexé.
Script PHP |
require_once('../smarty/Smarty.class.php');
$oSmarty = new Smarty();
$mon_tableau_indexe = array('Jean-Luc', 'Jean', 'Sylvain', 'Eric');
$oSmarty->assign('smarty_mon_tableau_indexe', $mon_tableau_indexe);
$oSmarty->display('tabIndexe.tpl'); |
Dans le fichier de
templates,
on boucle sur chaque valeur du tableau indexé en utilisant
la fonction Smarty {section ...}...{/section}.
Fichier tabIndexe.tpl | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Test smarty</title>
</head>
<body>
<h1>Test smarty</h1>
<ul>
{section name=index_tab_index loop=$smarty_mon_tableau_indexe}
<li>{$smarty_mon_tableau_indexe[index_tab_index]}</li>
{/section}
</ul>
</body>
</html> |
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU |
Le Script PHP où l'on déclare le tableau associatif.
require_once('../smarty/Smarty.class.php');
$oSmarty = new Smarty();
$aMonTableauAsscoiatif = array(
"Eric" => "Pommereau",
"Jl" => "Michel",
"Jean" => "Peyroux"
);
$oSmarty->assign("smarty_mon_tableau_assoc", $aMonTableauAsscoiatif);
$oSmarty->display("tabAssoc.tpl"); |
Le fichier de
templates,
ici deux méthodes sont présentées.
L'une par l'intermédiaire de la fonction {foreach ...}...{/foreach}
permet l'accès à toutes les valeurs du tableau associatif sans
index et sans clé.
L'autre par accès direct à la valeur du tableau, en utilisant
la clé.
Fichier tabAssoc.tpl | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Les tableaux indexés avec Smarty</title>
</head>
<body>
<h1>Les tableaux indexés avec Smarty</h1>
<ul>
{foreach from=$smarty_mon_tableau_assoc item=currentItem}
<li>Elément: {$currentItem}</li>
{/foreach}
<li>Clé Eric: {$smarty_mon_tableau_assoc.Eric}</li>
<li>Clé Jl: {$smarty_mon_tableau_assoc.Jl}</li>
<li>Clé Jean: {$smarty_mon_tableau_assoc.Jean}</li>
</ul>
</body>
</html> |
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU | Script PHP |
require_once('../smarty/Smarty.class.php');
class personne
{
public $nom = "";
public $prenom = "";
public $aInfos = array();
public function __construct($sNom, $sPrenom) {
$this->nom = $sNom;
$this->prenom = $sPrenom;
}
public function add_info($sInfo) {
array_push($this->aInfos, $sInfo);
}
}
$oSmarty = new Smarty();
$oPersonne = new personne("POMMEREAU", "Eric");
$oPersonne->add_info("mobile: 06.11.75.86.xx");
$oPersonne->add_info("Adresse: 4, villa des Marronniers 91580 ETRECHY");
$oPersonne->add_info("Date de naissance: 23/11/1973");
$oSmarty->assign("smarty_objet_personne", $oPersonne);
$oSmarty->display("exempleClass.tpl"); |
Fichier exempleClass.tpl | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Test smarty</title>
</head>
<body>
<h1>Test smarty</h1>
<ul>
<li>Propriété "nom" de l'objet: {$smarty_objet_personne->nom}</li>
<li>Propriété "aInfos" (première valeur du tableau) de l'objet:
{$smarty_objet_personne->aInfos[0]}
</li>
</ul>
</body>
</html> |
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU |
Smarty permet l'utilisation des variables réservées PHP
comme les variables GET, POST ...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Les variables réservées Smarty</title>
</head>
<body>
<h1>Les variables réservées Smarty</h1>
<ul>
<li>{$smarty.get.nom}</li>
<li>{$smarty.post.prenom}</li>
</ul>
</body>
</html> |
On peut également accéder à d'autres types de variables
réservées comme COOKIE, SESSION, END et SERVER (en fonction
de ce que permet le serveur)
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU |
Comme en PHP, Smarty permet la prise en charge des conditions
dans les templates.
Le Script PHP |
session_start();
$_SESSION['is_admin'] = 'true';
require_once('../lib_smarty/Smarty.class.php');
$oSmarty = new Smarty();
$oSmarty->display("conditions.tpl"); |
Le fichier conditions.tpl | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Condition dans Smarty</title>
</head>
<body>
<h1>Condition dans Smarty</h1>
<p>
{if $smarty.session.is_admin == true}
Bonjour administrateur !!
{else}
Bonjour utilisateur lambda !!
{/if}
</p>
</body>
</html> |
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU |
Par exemple :
Fatal error: Smarty error: [in post_get.tpl line 7]: syntax error: unrecognized tag: position:relative;padding:1em;
(Smarty_Compiler.class.php, line 439) in C:\Program Files\wamp\www\demos\init_smarty\lib_smarty\Smarty.class.php on line 1095 |
La solution : la fonction Smarty {literal}...{/literal}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Condition dans Smarty</title>
{literal}
<style type="text/css">
#ysearchmod {
position: relative;
padding: 1em;
}
</style>
<script language="JavaScript" type="text/javascript">
function dis_bonjour()
{
alert('Bonjour');
}
</script>
{literal}
...
</html> |
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU |
Possible à l'aide d'une fonction utilisateur, ici
{HTML_OPTIONS ...}.
Le Script Php |
require_once('../smarty/Smarty.class.php');
$oSmarty = new Smarty();
$aNoms = array("Sylvain", "Jean", "Jean-Luc", "Eric");
$aIndex = array(1,2,3,4);
$iSelected = 3;
$oSmarty->assign('smarty_liste_noms', $aNoms);
$oSmarty->assign('smarty_liste_index', $aIndex);
$oSmarty->assign('smarty_liste_selected', $iSelected);
$oSmarty->display('html_options.tpl'); |
Le fichier html_options.tpl | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>exemple HTML_OPTIONS</title>
</head>
<body>
<form name="mon_formulaire">
<select name="gars_du_dev">
{html_options
values = $smarty_liste_index
selected = $smarty_liste_selected
output = $smarty_liste_noms}
</select>
</form>
</body>
</html> |
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU |
La fonction Smarty {cycle...} permet dans une boucle
(fonctions {foreach...} ou {section...})
d'alterner n valeurs spécifiées dans l'argument values.
Le Script Php | require_once('../lib_smarty/Smarty.class.php');
$oSmarty = new Smarty();
$aNoms = array("Sylvain", "Jean", "Jean-Luc", "Eric");
$oSmarty->assign('smarty_liste_noms', $aNoms);
$oSmarty->display('cycle.tpl'); |
Dans cet exemple on utilise {cycle...} pour faire
alterner deux propriètés CSS
(couleur rouge et couleur bleue).
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Exemple fonction cycle</title>
</head>
<body>
{section name=idx loop=$smarty_liste_noms}
<div style="background-color:{cycle values="red,blue"};">
{$smarty_liste_noms[idx]}
</div>
{/section}
</body>
</html> |
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU |
La fonction Smarty {mailto ...} permet la création
d'un lien de type mailto. L'argument encode permet de
spécifier le type d'encodage de l'adresse email soit en
JavaScript
soit en hexadécimal. Cela permet d'éviter le spam.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Exemple fonction mailto</title>
</head>
<body>
{mailto address="eric190@caramail.com" encode="javascript"}
</body>
</html> |
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU | Script Php |
require_once('../lib_smarty/Smarty.class.php');
$oSmarty = new Smarty();
$oSmarty->assign('smarty_string', 'Les Templates Avec SMARTY');
$oSmarty->display("upper_lower.tpl"); |
Pour cela rien de plus simple, les filtres upper et lower
sont là pour ça.
Fichier upper_lower.tpl | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Majuscules / minuscules</title>
</head>
<body>
<h1>Majuscules / minuscules</h1>
<p>{$smarty_string|upper}</p>
<p>{$smarty_string|lower}</p>
</body>
</html> |
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
| auteur : Eric POMMEREAU |
Smarty propose une console de débogage qui affiche les fichiers
de template
appelés ainsi que les variables recensées.
Plusieurs possibilités s'offrent pour afficher cette console
-
Appel de la console par javascript
(ouverture d'une fenêtre popup) en fixant la propriété
debugging de l'objet Smarty à true dan le script PHP.
Dans le script Php | $oSmarty->debugging = true; |
-
Appel de la console par JavaScript (ouverture d'une
fenêtre popup) en faisant appel à la fonction {debug}
dans le fichier de template
debug.tpl | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>La console avec javascript</title>
</head>
<body>
{debug}
</body>
</html> |
Appel de la console directement dans le fichier de template
en faisant appel à la fonction {debug ouput=html}.
debug_html.tpl | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>La console avec javascript</title>
</head>
<body>
{debug output="html"}
</body>
</html> |
Enfin, si dans le Script PHP la propriété de l'objet Smarty
debugging_ctrl est fixée à true, vous pourrez provoquer
l'affichage de la console de débogage en passant un paramètre
dans l'url, la clé SMARTY_DEBUG.
|
lien : Qu'est-ce que Smarty ?
lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2003
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|