2. Amaury Bouchard
Diplômé Epita Systèmes & Réseaux + EMBA Epitech
Directeur technique de Fine Media,
éditeur des sites ComprendreChoisir.com
Blogueur et conférencier
amaury.net
www.geek-directeur-technique.com
@geekcto
3. Smarty en quelques mots
● Créé par Andrei Zmievski
● Licence libre LGPL
● Syntaxe claire (thank you captain obvious)
● Communauté active (évolution, documentation)
● Intégration aisée à tout projet
● Extensible facilement
● Système de cache intégré
6. Syntaxe de base
Écrire un commentaire qui ne sera pas dans le résultat final
{* mon commentaire *}
Afficher une variable
{$myName}
Afficher un élément d'un tableau
{$identifiers[0]}
Afficher un élément de tableau associatif
{$user.name}
Expression mathématique
{$age+10}
7. Variable spéciale $smarty
Afficher un paramètre GET/POST
{$smarty.get.name}
{$smarty.post.name}
Afficher un cookie
{$smarty.cookies.name}
Accéder à une variable de session PHP
{$smarty.session.id}
Utiliser la superglobale $_SERVER
{$smarty.server.HTTP_REFERER}
Afficher le timestamp courant
{$smarty.now}
8. Filtres de variables
Afficher le contenu d'une variable en minuscule/majuscule
{$url|lower} {$name|upper}
Échapper tous les caractères spéciaux HTML d'une variable
{$htmlContent|escape}
Utiliser une valeur par défaut si la variable est vide
{$name|default:'Utilisateur inconnu'}
Afficher la date courante après formatage
{$smarty.now|date_format:'d/m/Y'}
Substituer du texte
{$text|replace:'PHP5':'PHP7'}
9. Fonctions PHP comme filtre
Inverser une chaîne de caractères
{$text|strrev}
Afficher un hash MD5
{$var|md5}
Encoder une variable au format JSON
{$data|json_encode}
Afficher le nombre de caractères identiques
{$str1|similar_text:$str2}
12. Fonctions Smarty
Assignation de variable
{assign var=v1 value=$age+10}
Boucler parmi plusieurs valeurs
{cycle values='valeur1,valeur2'}
Effectuer un calcul mathématique
{math equation='x + y' x=$age y=3}
Ouvrir une popup avec toutes les variables
{debug}
14. Inclusion de templates
Inclusion simple
{include file='header.tpl'}
Inclusion avec passage de variables
{include file='header.tpl'
title=$article.title}
15. Héritage de templates
Création d'un template de base (page.tpl)
<html>
<head>
<title>{block name="title"}</title>
</head>
<body>
{block name="body"}
</body>
</html>
Création d'un « vrai » template qui va l'étendre
{extends file="page.tpl"}
{block name="title"}
{$title|default:'Titre de page'}
{/block}
{block name="body"}
Corps de page
{/block}
17. Création d'un filtre
Création d'un fichier modifier.urlize.php
<?
function smarty_modifier_urlize($str) {
$str = str_replace($str, ' ', '-');
$url = urlencode($str);
return ($url);
}
Utilisation du filtre dans un template
<a href="/content/{$content.title|urlize}">
18. Création d'une fonction
Création d'un fichier function.urlize.php
<?
function smarty_function_urlize($params,
$template) {
$str = $params['url'];
$str = str_replace($str, ' ', '-');
$url = urlencode($str);
return ($url);
}
Utilisation du filtre dans un template
<a href="/content/{urlize url=$content.title}">
20. Installation avec Composer
Création d'un fichier composer.json
{
"require": {
"smarty/smarty": "3.1.*@dev"
}
}
Téléchargement des fichiers
$ php composer.phar install
Chargement par l'autoloader
<? include_once('vendor/autoload.php');
21. Installation avec apt-get
Installation de la bibliothèque
$ sudo apt-get install smarty3
Chargement de la bibliothèque
<?
include_once('Smarty3/Smarty.class.php');
22. Exemple de code
Code PHP
<?
// chargement
include_once('Smarty3/Smarty.class.php');
// instanciation
$smarty = new Smarty();
// définition de variable
$users = array('Bob', 'Sully', 'Léon');
$smarty->assign('users', $users);
// interprétation du template et
// affichage du résultat
$smarty->display('template.tpl');
25. Exemple de code
Code PHP
<?
// chargement
include_once('Smarty3/Smarty.class.php');
// instanciation
$smarty = new Smarty();
// configuration du cache
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
if (!$smarty->is_cached('template.tpl')) {
// définition de variable
$users = array('Bob', 'Sully', 'Léon');
$smarty->assign('users', $users);
}
// interprétation du template et affichage du résultat
$smarty->display('template.tpl');
26. Merci !
Au fait, on recrute un lead developer
Tu aimes le PHP, MySQL, Redis, Memcache, Selenium, Git,
les code reviews, les sites à fort trafic, avoir l'impression
de travailler pour quelque chose d'utile en plus de
rejoindre une équipe sympa et motivée ?
=> amaury@amaury.net