FAQ PHP
FAQ PHPConsultez toutes les FAQ
Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 18 septembre 2021
- Qu'est-ce que Smarty ?
- Comment installer Smarty sur un serveur web ?
- Comment utiliser Smarty dans un script ?
- Afficher une variable simple (entier et chaîne)
- Afficher le contenu d'un tableau indexé
- Afficher le contenu d'un tableau associatif
- Afficher le contenu d'un objet dans un template
- Afficher une variable GET ou POST directement dans un template
- Des conditions dans un template (if / else ...)
- Erreur lors de l'ajout CSS ou de JavaScript dans un template
- Inclure un template dans un autre template
- Créer facilement une liste déroulante dans un template
- Réaliser simplement une alternance de couleur dans un tableau
- Eviter le spam avec la fonction Smarty {mailto...}
- Formater une date dans un template
- Mettre en majuscule ou en minuscule dans un template
- Une valeur par défaut dans une variable Smarty
- Débogage avec Smarty
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
- 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 !!
Lien : Qu'est-ce que Smarty ?
Lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
- 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éthodeassign()
- 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
// 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
'
);
<!
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
Dans la partie PHP on déclare le tableau indexé.
// 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}.
<!
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 : 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.
// 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é.
<!
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 : Qu'est-ce que Smarty ?
Lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
// 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"
);
<!
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 : 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 ...
<!
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 : 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.
// 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
"
);
<!
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
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:
1
em;
}
</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
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 : 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 ...}.
// 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
'
);
<!
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 : 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.
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 : 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.
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.
// 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
"
);
Lien : Qu'est-ce que Smarty ?
Lien : Initiation aux templates en PHP avec Smarty, par Eric Pommereau
// 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.
<!
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 : 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.
<p>{$smarty-string|default:"Valeur par défaut"}</p>
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.
$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
<!
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}.
<!
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