Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Qu'est-ce que Smarty ?
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 : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Installer et utiliser Smarty
auteur : Eric POMMEREAU
Installer les sources de Smarty sur un serveur web
  1. 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.
  2. 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)
  3. Attention le répertoire templates_c doit être accessible en écriture pour le serveur web !!
Utiliser Smarty dans un script PHP
  1. Dans un premier temps il faut créer le fichier de templates dans le répertoire templates/
  2. 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)
  3. 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
  4. Déclarer l'objet Smarty
  5. Recenser une variable Smarty avec la méthode assign()
  6. Provoquer l'affichage avec la méthode display() du fichier de templates
  7. Pour finir, tester en appelant le script PHP
lien : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Afficher une variable simple (entier et chaîne)
auteur : Eric POMMEREAU
Script php
// Inclure la librairie smarty
require_once('../smarty/Smarty.class.php');

// Instancier un objet smarty
$oSmarty = new Smarty();

// 1. Affectation des variables
$une_chaine = "C'est génial smarty";
$un_entier = 33;

// 2. Recensement dans smarty
$oSmarty->assign('smarty_une_chaine', $une_chaine);
$oSmarty->assign('smarty_un_entier', $un_entier);

// 3. Affichage du template après passage de l'objet
$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 : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Afficher le contenu d'un tableau indexé
auteur : Eric POMMEREAU
Dans la partie PHP on déclare le tableau indexé.
Script PHP
// Inclure la librairie smarty
require_once('../smarty/Smarty.class.php');

// Instancier notre objet smarty
$oSmarty = new Smarty();

// 1. Création et affectation d'un tableau indexé
$mon_tableau_indexe = array('Jean-Luc', 'Jean', 'Sylvain', 'Eric');

// 2. Recensement dans smarty
$oSmarty->assign('smarty_mon_tableau_indexe', $mon_tableau_indexe);

// 3. Affichage du template après passage de l'objet
$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>	
      <!-- Pour chaque élément du tableau '$smarty_mon_tableau_indexe' -->
      {section name=index_tab_index loop=$smarty_mon_tableau_indexe}
      <!-- Afficher un <li> avec l'élément courant du tableau -->
      <li>{$smarty_mon_tableau_indexe[index_tab_index]}</li>	
      {/section}
    </ul>
  </body>
</html>
lien : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Afficher le contenu d'un tableau associatif
auteur : Eric POMMEREAU
Le Script PHP où l'on déclare le tableau associatif.
// Inclure la librairie smarty
require_once('../smarty/Smarty.class.php');

// Instancier l'objet smarty
$oSmarty = new Smarty();

// 1. Création et affectation d'un tableau associatif
$aMonTableauAsscoiatif = array(
  "Eric" => "Pommereau",
  "Jl" => "Michel",
  "Jean" => "Peyroux"
);

// 2. Recensement dans smarty
$oSmarty->assign("smarty_mon_tableau_assoc", $aMonTableauAsscoiatif);

// 3. Affichage du template après passage de l'objet
$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>
      <!-- Première méthode: accès à toutes les valeurs "en aveugle"--> 

      {foreach from=$smarty_mon_tableau_assoc item=currentItem}
      <li>Elément: {$currentItem}</li>
      {/foreach}
         
      <!-- Seconde méthode: accès individuel par la clé du tableau -->
         
      <li>Clé Eric: {$smarty_mon_tableau_assoc.Eric}</li>
      <!-- Pommereau -->
      <li>Clé Jl: {$smarty_mon_tableau_assoc.Jl}</li>
      <!-- Michel -->
      <li>Clé Jean: {$smarty_mon_tableau_assoc.Jean}</li>
      <!-- Peyroux -->         
    </ul>
  </body>
</html>
lien : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Afficher le contenu d'un objet dans un template
auteur : Eric POMMEREAU
Script PHP
// Inclure la librairie smarty
require_once('../smarty/Smarty.class.php');

// Définition de la classe
class personne
{
  public $nom = "";
  public $prenom = "";
  public $aInfos = array();
  // Constructeur	
  public function __construct($sNom, $sPrenom) {
    $this->nom = $sNom;
    $this->prenom = $sPrenom;
  }
	
  // Ajouter une info pour le contact
  public function add_info($sInfo) {
    array_push($this->aInfos, $sInfo);
  }
}

// Instancier l'objet smarty
$oSmarty = new Smarty();

// 1. Création et affectation d"un objet
$oPersonne = new personne("POMMEREAU", "Eric");

// Ajouter des informations
$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");

// 2. Recensement dans smarty
$oSmarty->assign("smarty_objet_personne", $oPersonne);

// 3. Affichage du template après passage de l"objet
$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>
      <!-- Affiche "Pommereau" -->
			
      <li>Propriété "aInfos" (première valeur du tableau) de l'objet:
      {$smarty_objet_personne->aInfos[0]}
      </li>
      <!-- Affiche "mobile: 01.213.65.32" -->
    </ul>
  </body>
</html>
lien : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Afficher une variable GET ou POST directement dans un template
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>
      <!-- Affichera la valeur correpondant à la clé nom passé en GET-->
      <li>{$smarty.get.nom}</li>
      <!-- Affichera la valeur correpondant à la clé prénom passé en POST-->         
      <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 : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Des conditions dans un template (if / else ...)
auteur : Eric POMMEREAU
Comme en PHP, Smarty permet la prise en charge des conditions dans les templates.
Le Script PHP
// Prise en charge des sessions
session_start();

// Ajout d'une variable de session
$_SESSION['is_admin'] = 'true';

// Inclusion de la librairie Smarty
require_once('../lib_smarty/Smarty.class.php');

// Instanciation de l'objet smarty
$oSmarty = new Smarty();

// Affichage du template après passage de l'objet
$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 : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Erreur lors de l'ajout CSS ou de JavaScript dans un template
auteur : Eric POMMEREAU
L'insertion de CSS ou de JavaScript dans un template provoque une erreur.

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 : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Inclure un template dans un autre template
auteur : Eric POMMEREAU
Comme en PHP on utilisera la fonction Smarty {include...} avec un argument file qui est le nom du template à inclure.
{include file="header.tpl"}
Les variables recencées dans le script PHP sont accessibles dans les templates inclus.

lien : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Créer facilement une liste déroulante dans un template
auteur : Eric POMMEREAU
Possible à l'aide d'une fonction utilisateur, ici {HTML_OPTIONS ...}.
Le Script Php
// Inclure la librairie Smarty
require_once('../smarty/Smarty.class.php');

// Instancier l'objet Smarty
$oSmarty = new Smarty();

// Liste des textes pour chaque "<option>"
$aNoms = array("Sylvain", "Jean", "Jean-Luc", "Eric");

// Liste des valeurs pour chaque "<option>"
$aIndex = array(1,2,3,4);

// L'élément selectionné est le 3
$iSelected = 3;

// Recensement des variables
$oSmarty->assign('smarty_liste_noms', $aNoms);
$oSmarty->assign('smarty_liste_index', $aIndex);
$oSmarty->assign('smarty_liste_selected', $iSelected);

// Affichage du template
$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">
        <!-- Mise en liste du tableau $smarty_liste_noms -->
        <!-- et selection de l'élément indiqué par $smarty_liste_selected -->
        {html_options 
          values = $smarty_liste_index 
          selected = $smarty_liste_selected 
          output = $smarty_liste_noms}
      </select>
    </form>
  </body>
</html>
lien : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Réaliser simplement une alternance de couleur dans un tableau
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>
    <!-- pour chaque élément de la liste -->
    {section name=idx loop=$smarty_liste_noms}
      <!-- afficher un div et alterner le style (red et blue) -->
      <div style="background-color:{cycle	values="red,blue"};">
        {$smarty_liste_noms[idx]}
      </div>
    {/section}
  </body>
</html>
lien : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Eviter le spam avec la fonction Smarty {mailto...}
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 : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Formater une date dans un template
auteur : Eric POMMEREAU
La fonction utilisateur (ou filtre) date_format permet comme avec la fonction PHP date(...) de formater une date.
Script Php
// Inclure la librairie Smarty
require_once('../lib_smarty/Smarty.class.php');

// Instancier l'objet smarty
$oSmarty = new Smarty();

// Recenser au moteur la date et heure courante (timestamp)
$oSmarty->assign('smarty_date', mktime());

// Affichage du template après passage de l'objet
$oSmarty->display("date.tpl");
dates.tpl
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Dates Smarty</title>           	
  </head>
  <body>
    <h1>Les dates avec Smarty</h1>
    <p>Date et heure: {$smarty_date|date_format:"%d/%m/%Y - %H:%M:%S"}</p>
  </body>
</html>
lien : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Mettre en majuscule ou en minuscule dans un template
auteur : Eric POMMEREAU
Script Php
// Inclure la librairie Smarty
require_once('../lib_smarty/Smarty.class.php');

// Instancier l'objet smarty
$oSmarty = new Smarty();

// Recenser au moteur la date et heure courante (timestamp)
$oSmarty->assign('smarty_string', 'Les Templates Avec SMARTY');

// Affichage du template après passage de l'objet
$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>
		<!-- Affiche: LES TEMPLATES AVEC SMARTY -->
		
		<p>{$smarty_string|lower}</p>
		<!-- Affiche: les templates avec smarty -->      
	</body>
</html>
lien : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Une valeur par défaut dans une variable Smarty
auteur : Eric POMMEREAU
L'utilisation du modificateur de variable permet d'afficher une valeur par défaut si la variable est vide ou si elle n'a pas été affectée dans le script PHP.
<p>{$smarty_string|default:"Valeur par défaut"}</p>
lien : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

Débogage avec Smarty
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 : faq Qu'est-ce que Smarty ?
lien : fr Initiation aux templates en PHP avec Smarty, par Eric Pommereau

precedent    sommaire    suivant   

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.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com