Soutenez-nous

FAQ PHPConsultez toutes les FAQ

Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 29 juillet 2013 

 
OuvrirSommaireBibliothèques, extensionsTemplatesSmarty

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.

Créé le 1er mars 2007  par Eric POMMEREAU

Lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau

  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 !!
Créé le 1er mars 2007  par Eric POMMEREAU

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

  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éthodeassign()
  6. Provoquer l'affichage avec la méthode display() du fichier de templates
  7. Pour finir, tester en appelant le script PHP
Créé le 2 juin 2007  par Eric POMMEREAU

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

Script PHP
Sélectionnez
// 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
Sélectionnez

<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

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

Dans la partie PHP on déclare le tableau indexé.

Script PHP
Sélectionnez
// 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
Sélectionnez

<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

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

Le Script PHP où l'on déclare le tableau associatif.

 
Sélectionnez
// 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
Sélectionnez

<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

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

Script PHP
Sélectionnez
// 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
Sélectionnez

<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

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

Smarty permet l'utilisation des variables réservées PHP comme les variables GET, POST ...

 
Sélectionnez
<!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)

Créé le 1er mars 2007  par Eric POMMEREAU

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

Comme en PHP, Smarty permet la prise en charge des conditions dans les templates.

Le Script PHP
Sélectionnez
// 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
Sélectionnez
<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

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

L'insertion de CSS ou de JavaScript dans un template provoque une erreur.

Par exemple :

 
Sélectionnez
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}

 
Sélectionnez
<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

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

Comme en PHP on utilisera la fonction Smarty {include...} avec un argument file qui est le nom du template à inclure.

 
Sélectionnez
{include file="header.tpl"}

Les variables recencées dans le script PHP sont accessibles dans les templates inclus.

Créé le 1er mars 2007  par Eric POMMEREAU

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

Possible à l'aide d'une fonction utilisateur, ici {HTML_OPTIONS ...}.

Le Script PHP
Sélectionnez
// 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
Sélectionnez
<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

Lien : Qu'est-ce que Smarty ?
Lien : Initiation aux templates en PHP avec Smarty, par 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
Sélectionnez
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).

 
Sélectionnez
<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

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

 
Sélectionnez
<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

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

La fonction utilisateur (ou filtre) date_format permet comme avec la fonction PHP date(...) de formater une date.

Script PHP
Sélectionnez
// 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
Sélectionnez

<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

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

Script PHP
Sélectionnez
// 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
Sélectionnez

<!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>
                
Créé le 1er mars 2007  par Eric POMMEREAU

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

 
Sélectionnez
<p>{$smarty-string|default:"Valeur par défaut"}</p>
Créé le 1er mars 2007  par Eric POMMEREAU

Lien : Qu'est-ce que Smarty ?
Lien : Initiation aux templates en PHP avec Smarty, par 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
Sélectionnez
$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
Sélectionnez
<!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
Sélectionnez
<!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.

Créé le 1er mars 2007  par Eric POMMEREAU

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

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Developpez.com Developpez LLC. Tous 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.