Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template...

152
Smarty - le moteur et compilateur de template PHP Monte Ohrt <[email protected]> Andrei Zmievski <[email protected]> Arnaud Cogoluègnes <[email protected]> Gérald Croës <[email protected]>

Transcript of Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template...

Page 1: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Smarty - le moteur et compilateur de template PHP

Monte Ohrt <[email protected]>

Andrei Zmievski <[email protected]>

Arnaud Cogoluègnes <[email protected]>

Gérald Croës <[email protected]>

Page 2: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Smarty - le moteur et compilateur de template PHPpar Monte Ohrt <[email protected]> et Andrei Zmievski <[email protected]>

par Arnaud Cogoluègnes <[email protected]> et Gérald Croës <[email protected]>

Version 2.0 ÉditionCopyright © 2001, 2002 par ispi of Lincoln, Inc.

Page 3: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Table des matièresPréface ..................................................................................................................................... iI. Pour commencer ................................................................................................................1

1. Qu’est-ce que Smarty ? ............................................................................................12. Installation.................................................................................................................3

Ce dont vous avez besoin..................................................................................3Installation de base.............................................................................................3Configuration avancée.......................................................................................5

II. Smarty pour les graphistes ............................................................................................73. Bases syntaxiques.....................................................................................................7

Commentaires .....................................................................................................7Fonctions..............................................................................................................7Paramètres ...........................................................................................................8Variables insérées dans des chaînes de caractères .........................................8

4. Variables ....................................................................................................................9Variables assignées depuis PHP .......................................................................9Variables chargées depuis des fichiers de configuration ............................10Variable réservée {$smarty}.............................................................................12

5. Modificateurs de variables....................................................................................15capitalize ............................................................................................................15count_characters ...............................................................................................15cat ........................................................................................................................16count_paragraphs.............................................................................................16count_sentences ................................................................................................17count_words......................................................................................................17date_format........................................................................................................17default.................................................................................................................20escape .................................................................................................................20indent..................................................................................................................21lower...................................................................................................................22nl2br....................................................................................................................22regex_replace.....................................................................................................23replace ................................................................................................................23spacify.................................................................................................................24string_format.....................................................................................................24strip .....................................................................................................................25strip_tags............................................................................................................25truncate...............................................................................................................26upper ..................................................................................................................27wordwrap ..........................................................................................................27

6. Combiner des modificateurs de variable............................................................297. Fonctions natives....................................................................................................31

capture................................................................................................................31config_load ........................................................................................................31foreach,foreachelse ...........................................................................................33include................................................................................................................34include_php.......................................................................................................35insert ...................................................................................................................37if,elseif,else.........................................................................................................38ldelim,rdelim.....................................................................................................39literal...................................................................................................................39php......................................................................................................................40section,sectionelse.............................................................................................40strip .....................................................................................................................48

8. Fonctions utilisateur ..............................................................................................51assign ..................................................................................................................51counter................................................................................................................51cycle ....................................................................................................................52

iii

Page 4: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

debug..................................................................................................................53eval......................................................................................................................53fetch ....................................................................................................................54html_checkboxes...............................................................................................55html_image........................................................................................................57html_options......................................................................................................58html_radios........................................................................................................59html_select_date ...............................................................................................61html_select_time ...............................................................................................64html_table ..........................................................................................................68math....................................................................................................................70mailto..................................................................................................................71popup_init .........................................................................................................73popup .................................................................................................................73textformat...........................................................................................................78

9. Fichiers de configuration.......................................................................................8310. Console de débogage...........................................................................................85

III. Smarty pour les programmeurs.................................................................................8711. Constantes .............................................................................................................87

SMARTY_DIR ...................................................................................................8712. Variables ................................................................................................................89

$template_dir ....................................................................................................89$compile_dir......................................................................................................89$config_dir .........................................................................................................89$plugins_dir.......................................................................................................89$debugging........................................................................................................89$debug_tpl .........................................................................................................90$debugging_ctrl ................................................................................................90$global_assign ...................................................................................................90$undefined.........................................................................................................90$autoload_filters ...............................................................................................90$compile_check.................................................................................................90$force_compile ..................................................................................................91$caching..............................................................................................................91$cache_dir ..........................................................................................................91$cache_lifetime..................................................................................................91$cache_handler_func........................................................................................92$cache_modified_check ...................................................................................92$config_overwrite .............................................................................................92$config_booleanize ...........................................................................................92$config_read_hidden........................................................................................92$config_fix_newlines........................................................................................92$default_template_handler_func ...................................................................93$php_handling ..................................................................................................93$security .............................................................................................................93$secure_dir.........................................................................................................93$security_settings .............................................................................................93$trusted_dir .......................................................................................................94$left_delimiter ...................................................................................................94$right_delimiter ................................................................................................94$compiler_class .................................................................................................94$request_vars_order .........................................................................................94$compile_id .......................................................................................................94$use_sub_dirs....................................................................................................94$default_modifiers............................................................................................95

13. Méthodes ...............................................................................................................97append................................................................................................................97append_by_ref ..................................................................................................97assign ..................................................................................................................98

iv

Page 5: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

assign_by_ref.....................................................................................................98clear_all_assign .................................................................................................98clear_all_cache...................................................................................................99clear_assign........................................................................................................99clear_cache.........................................................................................................99clear_compiled_tpl .........................................................................................100clear_config......................................................................................................100config_load ......................................................................................................100display ..............................................................................................................101fetch ..................................................................................................................102get_config_vars ...............................................................................................103get_registered_object......................................................................................103get_template_vars...........................................................................................103is_cached ..........................................................................................................104load_filter .........................................................................................................104register_block ..................................................................................................105register_compiler_function ...........................................................................105register_function .............................................................................................105register_modifier.............................................................................................106register_object .................................................................................................106register_outputfilter .......................................................................................106register_postfilter............................................................................................107register_prefilter..............................................................................................107register_resource.............................................................................................107trigger_error ....................................................................................................107template_exists................................................................................................108unregister_block .............................................................................................108unregister_compiler_function.......................................................................108unregister_function ........................................................................................108unregister_modifier........................................................................................108unregister_object.............................................................................................109unregister_outputfilter...................................................................................109unregister_postfilter .......................................................................................109unregister_prefilter.........................................................................................109unregister_resource ........................................................................................109

14. Cache....................................................................................................................111Paramétrer le cache ........................................................................................111Caches multiples pour une seule page........................................................113groupes de fichiers de cache .........................................................................114

15. Fonctionnalités avancées...................................................................................115Objets................................................................................................................115Filtres de pré-compilation .............................................................................116Filtres de post-compilation............................................................................116Filtres de sortie ................................................................................................116Fonction de gestion du cache........................................................................117Ressources........................................................................................................119

16. Etendre Smarty avec des plugins.....................................................................123Comment fonctionnent les plugins..............................................................123Conventions de nommage ............................................................................123Ecrire des plugins ...........................................................................................124Les fonctions de templates ............................................................................124Modificateurs ..................................................................................................125Fonctions de blocs...........................................................................................127Fonctions de compilation ..............................................................................128filtres de pré-compilation/filtres de post-compilation .............................128Filtres de sortie ................................................................................................129Ressources........................................................................................................130Insertions..........................................................................................................131

v

Page 6: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

IV. Appendices..................................................................................................................13317. Diagnostic des erreurs .......................................................................................133

Erreurs Smarty/PHP......................................................................................13318. Trucs et astuces ...................................................................................................135

Gestion des variables non-assignées............................................................135Gestion des variables par défaut ..................................................................135Passage du titre à un template d’en-tête .....................................................135Dates .................................................................................................................136WAP/WML .....................................................................................................137Templates composants ...................................................................................138Dissimuler les adresses email .......................................................................139

19. Ressources ...........................................................................................................14120. BUGS....................................................................................................................143

vi

Page 7: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Préface

"Comment rendre mes scripts PHP indépendants de la présentation ?". Voici sansdoute la question la plus posée sur la mailing list PHP. Alors que PHP est étiqueté"langage de script pour HTML", on se rend vite compte, après quelques projets quimélangent sans complexe HTML et PHP, que la séparation entre la forme et le conte-nu est important. De plus, dans de nombreuses entreprises les rôles du designer etdu programmeur sont distincts. La solution template coule donc de source.

Dans notre entreprise par exemple, le développement d’une application se fait de lamanière suivante : une fois le cahier des charges écrit, le designer réalise une ma-quette, et donne ses interfaces au programmeur. Le programmeur implémente lesfonctionnalités applicatives et utilise les maquettes pour faire des squelettes de tem-plates. Le projet est alors passé au designer HTML/responsable de la mise en pagequi amène les templates jusqu’au faîte de leur gloire. Il est possible que le projet fasseune fois ou deux des allers/retours entre la programmation et la présentation. Enconséquence, il est important de disposer d’un bon système de template. Les pro-grammeurs ne veulent pas avoir à faire au HTML, et ne veulent pas non plus que lesdesigners HTML bidouillent le code PHP. Les designers ont besoin d’outils commedes fichiers de configuration, des blocs dynamiques et d’autres solutions pour ré-pondre à des problématiques d’interface, mais ne veulent pas nécessairement avoir àfaire à toutes les subtilités de la programmation PHP.

Un rapide tour d’horizon des solutions type template aujourd’hui et l’on s’aperçoitque la plupart d’entre elles n’offrent que des moyens rudimentaires pour substituerdes variables dans des templates, ainsi que des fonctionnalités limitées de blocs dy-namiques. Cependant nous avons besoin d’un peu plus. Nous ne voulons pas queles programmeurs s’occupent de la présentation HTML du TOUT, mais cela est pra-tiquement inévitable. Par exemple, si un designer veut des couleurs d’arrière plandifférentes pour alterner entre différents blocs dynamiques, il est nécessaire que cedernier travaille avec le programmeur. Nous avons aussi besoin que les designerssoient capables de travailler avec leurs propres fichiers de configuration pour y récu-pérer des variables, exploitables dans leurs templates. Et la liste est longue.

Fin 1999, nous avons commencé à écrire une spécification pour un moteur de tem-plate. Une fois la spécification terminée, nous avons commencé à travailler sur unmoteur de template écrit en C qui pourrait, avec un peu de chance, être inclus àPHP. Non seulement nous avons rencontré des problèmes techniques complexes,mais nous avons participés à de nombreux débats sur ce que devait et ce que nedevait pas faire un moteur de template. De cette expérience nous avons décidé qu’unmoteur de template se devait d’être écrit sous la forme d’une classe PHP, afin quequiconque puisse l’utiliser à sa convenance. Nous avons donc réalisé un moteur detemplate qui se contentait de faire cela, et SmartTemplate a vu le jour (note : cetteclasse n’a jamais été soumise au public). C’était une classe qui faisait pratiquementtout ce que nous voulions : substitution de variables, inclusion d’autres templates,intégration avec des fichiers de configuration, intégration de code PHP, instruction’if’ basique et une gestion plus robuste des blocks dynamiques imbriqués. Elle fai-sait tout cela avec des expressions rationnelles et le code se révéla, comment dire,impénétrable. De plus, elle était relativement lente pour les grosses applications àcause de l’analyse et du travail sur les expressions rationnelles qu’elle devait faireà chaque exécution. Le plus gros problème du point de vue du programmeur étaittout le travail nécessaire en amont, dans le script PHP, pour configurer et exécuter lestemplates, et les blocs dynamiques. Comment rendre tout ceci plus simple ?

Puis vint la vision de ce que devait devenir Smarty. Nous savons combien le codePHP peut être rapide sans le coût d’analyse des templates. Nous savons aussi com-bien fastidieux et décourageant peut paraître le langage pour le designer moyen, etque cela peut être remplacé par une syntaxe spécifique, beaucoup plus simple. Et sinous combinions les deux forces ? Ainsi, Smarty était né...

i

Page 8: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Préface

ii

Page 9: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 1. Qu’est-ce que Smarty ?

Smarty est un moteur de template pour PHP. Plus précisément, il facilite la sépara-tion entre la logique applicative et la présentation. Cela s’explique plus facilementdans une situation où le programmeur et le designer de templates jouent des rôlesdifférents, ou, comme la plupart du temps, sont deux personnes distinctes. Suppo-sons par exemple que vous concevez une page Web qui affiche un article de news-letter. Le titre, le sous-titre, l’auteur et le corps sont des éléments de contenu, ils necontiennent aucune information concernant la présentation. Ils sont transmis à Smar-ty par l’application, puis le designer de templates éditent les templates et utilisentune combinaison de balises HTML et de balises de templates pour formater la pré-sentation de ces éléments (tableaux HTML, couleurs d’arrière-plan, tailles des po-lices, feuilles de styles, etc.). Un beau jour le programmeur a besoin de changer lafaçon dont le contenu de l’article est récupéré (un changement dans la logique ap-plicative). Ce changement n’affecte pas le designer de templates, le contenu arriveratoujours au template de la même façon. De même, si le le designer de templates veutchanger complétement l’apparence du template, aucun changement dans la logiquede l’application n’est nécessaire. Ainsi le programmeur peut changer la logique del’application sans restructurer les templates, et le designer de templates peut chan-ger les templates sans briser la logique applicative.

Et maintenant un mot rapide sur ce que Smarty NE fait PAS. Smarty n’a pas pourprétention de supprimer complétement les traitements au sein des templates. Il esttout à fait envisageable de recontrer un traitement dans un template, à conditionque ce dernier ne désserve que des besoins de présentation. Un conseil : laissez lalogique applicative en dehors des templates et la logique de présentation en dehorsde l’application. A l’avenir, cela permet une meilleure gestion des évènements.

L’un des aspects unique de Smarty est la compilation des templates. Cela signifieque Smarty lit les templates et crée des scripts PHP à partir de ces derniers. Unefois créés, ils sont exécutés. Il n’y a donc pas d’analyse coûteuse de templateà chaque requête, et les templates peuvent bénéficier des solutions de cachePHP comme Zend Accelerator (http://www.zend.com) ou PHP Accelerator(http://www.php-accelerator.co.uk).

Quelques caractéristiques de Smarty :

• Il est très rapide.

• Il est efficace, le parser PHP s’occupe du sale travail.

• Pas d’analyse de template coûteuse, une seule compilation.

• Il sait ne recompiler que les fichiers de templates qui ont été modifiés.

• Vous pouvez créer des fonctions utilisateurs et des modificateurs de variablespersonnalisés, le langage de template est donc extrémement extensible.

• Syntaxe des templates configurable, vous pouvez utiliser {}, {{}}, <!--{}-->, etccomme délimiteurs.

• Les instructions if/elseif/else/endif sont passées au parser PHP, la syntaxe del’expression {if...} peut être aussi simple ou aussi complexe que vous le désirez.

• Imbrication illimitée de sections, de ’if’, etc. autorisée.

• Il est possible d’inclure du code PHP directement dans vos templates, bien que celane soit pas obligatoire (ni conseillé), vu que le moteur est extensible.

• Support de cache intégré.

• Sources de templates arbitraires.

• Fonctions de gestion de cache personnalisables.

• Architecture de plugins

1

Page 10: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 1. Qu’est-ce que Smarty ?

2

Page 11: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 2. Installation

Ce dont vous avez besoinSmarty nécessite un serveur Web utilisant PHP 4.0.6 ou supérieur.

Installation de baseCopiez les fichiers bibliothèques de Smarty du répertoire /libs/ de la distribution àun emplacement accessible à PHP. Ce sont des fichiers PHP que vous NE DEVEZPAS modifier. Ils sont partagés par toutes les applications et ne seront mis à jour quelorsque vous installerez une nouvelle version de Smarty.

Exemple 2-1. fichiers de la bibliothèque SMARTY

Smarty.class.phpSmarty_Compiler.class.phpConfig_File.class.phpdebug.tpl/plugins/*.php (tous !)

Smarty utilise une constante PHP appelée SMARTY_DIR qui représente le chemincomplet de la bibliothèque Smarty. En fait, si votre application trouve le fichier Smar-ty.class.php, vous n’aurez pas besoin de définir la variable SMARTY_DIR, Smarty s’enchargera pour vous. En revanche, si Smarty.class.php n’est pas dans votre répertoired’inclusion ou que vous ne donnez pas un chemin absolu à votre application, vousdevez définir SMARTY_DIR explicitement. SMARTY_DIR doit avoir être terminé parun slash.

Voici comment créer une instance de Smarty dans vos scripts PHP :

Exemple 2-2. créer une instance de Smarty

require(’Smarty.class.php’);$smarty = new Smarty;

Essayez de lancer le script ci-dessus. Si vous obtenez une erreur indiquant que lefichier Smarty.class.php n’est pas trouvé, tentez l’une des choses suivantes :

Exemple 2-3. fournir un chemin absolu vers la bibliothèque Smarty

require(’/usr/local/lib/php/Smarty/Smarty.class.php’);$smarty = new Smarty;

Exemple 2-4. Ajouter le répertoire de la bibliothèque au chemin de php_include

// Editez le fichier php.ini, ajoutez le répertoire de la// bibliothèque Smarty au include_path et redémarrez le serveur Web.// Cela devrait ensuite fonctionner :require(’Smarty.class.php’);$smarty = new Smarty;

Exemple 2-5. Définir explicitement la constante SMARTY_DIR

define(’SMARTY_DIR’,’/usr/local/lib/php/Smarty/’);require(SMARTY_DIR.’Smarty.class.php’);$smarty = new Smarty;

3

Page 12: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 2. Installation

Maintenant que les fichiers de la librairie sont en place, il est temps de définir lesrépertoires de Smarty, pour votre application. Smarty a besoin de quatre répertoiresqui sont (par défaut) templates, templates_c, configs et cache. Chacun d’entre eux peutêtre défini via les attributs $template_dir, $compile_dir, $config_dir et $cache_dir respec-tivement. Il est vivement conseillé que vous régliez ces répertoires séparément pourchaque application qui utilise Smarty.

Assurez-vous de bien connaître chemin de la racine de votre arborescence Web. Dansnotre exemple, la racine est "/web/www.mydomain.com/docs". Seul Smarty accèdeaux répertoires en question, et jamais le serveur Web. Pour des raisons de sécu-rité, il est donc conseillé de sortir ces répertoires dans un répertoire en dehors del’arborescence Web.

Dans notre exemple d’installation, nous allons régler l’environnement de Smartypour une application de livre d’or. Nous avons ici choisi une application principa-lement pour mettre en évidence une convention de nommage des répertoires. Vouspouvez utiliser le même environnement pour n’importe quelle autre application, ilsuffit de remplacer "livredor" avec le nom de votre application. Nous allons mettrenos répertoires Smarty dans "/web/www.mydomain.com/smarty/livredor/".

Vous allez avoir besoin d’au moins un fichier à la racine de l’arborescence Web, ils’agit du script auquel l’internaute a accès. Nous allons l’appeler "index.php" et leplacer dans un sous-répertoire appelé "/livredor/". Il est pratique de configurer leserveur Web de sorte que "index.php" soit identifié comme fichier par défaut de cerépertoire. Aicnsi, si l’on tape "http://www.mydomain.com/livredor/", le script in-dex.php soit exécuté sans que "index.php" ne soit spécifié dans l’URL. Avec Apachevous pouvez régler cela en ajoutant "index.php" à la ligne où se trouve DirectoryIn-dex (séparez chaque entrée par un espace).

Jetons un coup d’oeil à la structure de fichier obtenue :

Exemple 2-6. exemple de structure de fichiers

/usr/local/lib/php/Smarty/Smarty.class.php/usr/local/lib/php/Smarty/Smarty_Compiler.class.php/usr/local/lib/php/Smarty/Config_File.class.php/usr/local/lib/php/Smarty/debug.tpl/usr/local/lib/php/Smarty/plugins/*.php

/web/www.mydomain.com/smarty/livredor/templates//web/www.mydomain.com/smarty/livredor/templates_c//web/www.mydomain.com/smarty/livredor/configs//web/www.mydomain.com/smarty/livredor/cache/

/web/www.mydomain.com/docs/livredor/index.php

Smarty a besoin d’accéder en écriture aux répertoires $compile_dir et $cache_dir,assurez-vous donc que le serveur Web dispose de ces droits d’accès. Il s’agitgénéralement de l’utilisateur "nobody" et du group "nobody". Pour lesutilisateurs de OS X, l’utilisateur par défaut est "web" et le group "web". Si vousutilisez Apache, vous pouvez parcourir le fichier httpd.conf (en général dans"/usr/local/apache/conf/") pour déterminer quel est l’utilisateur et le groupeauquel il appartient.

Exemple 2-7. régler les permissions d’accès

chown nobody:nobody /web/www.mydomain.com/smarty/templates_c/chmod 770 /web/www.mydomain.com/smarty/templates_c/

chown nobody:nobody /web/www.mydomain.com/smarty/cache/chmod 770 /web/www.mydomain.com/smarty/cache/

4

Page 13: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 2. Installation

Note technique : La commande chmod 770 est relativement bien sécurisée, elle donne àl’utilisateur "nobody" et au groupe "nobody" les accès en lecture/écriture aux répertoires.Si vous voulez donner le droit d’accès en lecture à tout le monde (principalement pourpouvoir accéder vous-même à ces fichiers), vous pouvez lui préférer chmod 775.

Nous devons créer le fichier index.tpl que Smarty va charger. Il va se trouver dans$template_dir.

Exemple 2-8. Edition de /web/www.mydomain.com/smarty/templates/index.tpl

{* Smarty *}

Hello, {$name}!

Note technique : {* Smarty *} est un commentaire de template. Il n’est pas obligatoiremais il est bon de commencer tous vos templates avec ce commentaire. Cela rend lefichier facilement reconnaissable en plus de son extension. Les éditeurs de texte peuventpar exemple reconnaître le fichier et adapter la coloration syntaxique.

Maintenant passons à l’édition du fichier index.php. Nous allons créer une instancede Smarty, assigner une valeur à une variable de template et afficher le résultat avecindex.tpl. Dans notre exemple d’environnement, "/usr/local/lib/php/Smarty" estdans notre include_path. Assurez-vous de faire la même chose ou d’utiliser des che-mins absolus.

Exemple 2-9. édition de /web/www.mydomain.com/docs/livredor/index.php

// charge la bibliothèque Smartyrequire(’Smarty.class.php’);

$smarty = new Smarty;

$smarty->template_dir = ’/web/www.mydomain.com/smarty/livredor/templates/’;$smarty->compile_dir = ’/web/www.mydomain.com/smarty/livredor/templates_c/’;$smarty->config_dir = ’/web/www.mydomain.com/smarty/livredor/configs/’;$smarty->cache_dir = ’/web/www.mydomain.com/smarty/livredor/cache/’;

$smarty->assign(’name’,’Ned’);

$smarty->display(’index.tpl’);

Note techique : Dans notre exemple, nous avons configuré les chemins absolus pourchacun des répertoires Smarty. Si ’/web/www.mydomain.com/smarty/livredor/’ est dansvotre include_path PHP alors ces réglages ne sont pas nécessaires. Quoi qu’il en soit ilest plus efficace et (par expérience) moins générateur d’erreurs de les définir avec deschemins absolus. Cela nous garantit que Smarty récupèrera les bons fichiers.

Et maintenant appelez le fichier index.php avec navigateur Web. Vous devriez voir"Hello, Ned!".

Vous venez de terminer l’installation de base de Smarty !

5

Page 14: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 2. Installation

Configuration avancéeCeci est la suite de l’installation de base, veuillez lire cette dernière avant de pour-suivre.

Une manière un peu plus commode de configurer Smarty est de faire votre propreclasse fille et de l’initialiser selon votre environnement. De la sorte, nous n’auronsplus besoin de configurer à chaques fois les chemins de notre environnement.Créons un nouveau répertoire "/php/includes/livredor/" et un nouveau fichierappelé "setup.php". Dans notre exemple d’environnement, "/php/includes" estnotre include_path PHP. Assurez-vous de faire la même chose ou alors d’utiliser deschemins absolus.

Exemple 2-10. édition de /php/includes/livredor/setup.php

// charge la librairie Smartyrequire(’Smarty.class.php’);

// le fichier setup.php est un bon// endroit pour charger les fichiers// de librairies de l’application et vous pouvez// faire cela juste ici. Par exemple :// require(’livredor/livredor.lib.php’);

class Smarty_livredor extends Smarty {

function Smarty_livredor() {

// Constructeur de la classe. Appelé automatiquement// à l’instanciation de la classe.

$this->Smarty();

$this->template_dir = ’/web/www.mydomain.com/smarty/livredor/templates/’;$this->compile_dir = ’/web/www.mydomain.com/smarty/livredor/templates_c/’;$this->config_dir = ’/web/www.mydomain.com/smarty/livredor/configs/’;$this->cache_dir = ’/web/www.mydomain.com/smarty/livredor/cache/’;

$this->caching = true;$this->assign(’app_name’,’Guest Book’);

}

}

Modifions maintenant le fichier index.php pour qu’il utilise "setup.php"

Exemple 2-11. édition de /web/www.mydomain.com/docs/livredor/index.php

require(’livredor/setup.php’);

$smarty = new Smarty_livredor;

$smarty->assign(’name’,’Ned’);

$smarty->display(’index.tpl’);

Vous savez maintenant qu’il est facile de créer une instance de Smarty, correctementconfigurée, en utilisant Smarty_livredor qui initialise automatiquement tout ce qu’ilfaut pour votre application.

6

Page 15: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 3. Bases syntaxiques

Toutes les balises Smarty sont entourées de délimiteurs. Par défaut, ces délimiteurssont { et } , mais ils peuvent être modifiés.

Pour ces exemples, nous supposons que vous utiliserez leur valeur par défaut. DansSmarty, le contenu qui est situé en dehors des délimiteurs est affiché comme contenustatique, inchangé. Lorsque Smarty rencontre des balises de template, il tente de lescomprendre et en affiche la sortie appropriée, en lieu et place.

CommentairesLes commentaires dans Smarty sont entourés d’asterisques, de cette façon : {* voiciun commentaire *} Les commentaires Smarty ne sont pas affichés dans la sortie finaledu template. Ils sont utilisés pour des notes internes, dans le template, pour aider lesdéveloppeurs à en comprendre le fonctionnement.

Exemple 3-1. Commentaires

{* Smarty *}

{* Inclusion de l’en tête *}{include file="header.tpl"}

{include file=$includeFile}

{include file=#includeFile#}

{* affiche des listes déroulantes *}<SELECT name=company>{html_options values=$vals selected=$selected output=$output}</SELECT>

FonctionsLes balises Smarty affichent une variable ou invoquent une fonction. Les fonctionssont appelées lorsqu’elles sont entourées, ainsi que leurs paramètres, des délimiteursSmarty. Par exemple : {nomfonction par1="val" par2="val"}.

Exemple 3-2. syntaxe des fonctions

{config_load file="colors.conf"}

{include file="header.tpl"}

{if $name eq "Fred"}Vous êtes admis dans cette zone

{else}Bienvenue, <font color="{#fontColor#}" >{$name}! </font >

{/if}

{include file="footer.tpl"}

Les fonctions natives et les fonctions utilisateurs ont toutes deux la même syntaxe,dans les templates. Les fonctions natives sont relatives au traitement interne de Smar-ty, comme par exemple if, section et strip. Elles ne peuvent être modifiées. Les fonc-tions utilisateurs sont des fonctions additionnelles, implémentées par l’intermédiairede plugins. Elles peuvent être modifiées pour correspondre à vos besoins, et vouspouvez en créer de nouvelles. html_options et html_select_date sont deux exemplesde fonctions utilisateurs.

7

Page 16: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 3. Bases syntaxiques

ParamètresLa plupart des fonctions attendent des paramètres qui régissent leur comportement.Les paramètres des fonctions Smarty sont très proches des attributs des balisesHTML. Les valeurs numériques n’ont pas besoin d’être entourées par desguillemets, par contre, ces guillemets sont recommandées lors de l’utilisationde chaînes de caractères. Des variables peuvent aussi être utilisées en tant queparamètres, et ne doivent pas être entourées de guillemets.

Certains paramètres requièrent des valeurs booléennes (true / false). Elles peuventêtre spécifiées par l’une des valeures suivantes, sans guillemet: true , on , et yes , oufalse , off , et no .

Exemple 3-3. Paramètres de fonction, syntaxe

{include file="header.tpl"}

{include file=$includeFile}

{include file=#includeFile#}

{html_select_date display_days=yes}

<SELECT name=company>{html_options values=$vals selected=$selected output=$output}</SELECT>

Variables insérées dans des chaînes de caractèresSmarty est capable d’interpréter les variables insérées à l’intérieur de chaînes entreguillemets, du moment que leur nom est exclusivement composé de chiffres, lettres,underscores et crochets. Si le nom de la variable contient tout autre caractère (point,référence à un objet, etc.) la variable doit être entourée d’apostrophes inverses (‘).

Exemple 3-4. Syntaxe d’insertion de variables dans des chaînes

EXEMPLE DE SYNTAXE:{func var="test $foo test"} <-- comprends $foo{func var="test $foo_bar test"} <-- comprends $foo_bar{func var="test $foo[0] test"} <-- comprends $foo[0]{func var="test $foo[bar] test"} <-- comprends $foo[bar]{func var="test $foo.bar test"} <-- comprends $foo (not $foo.bar){func var="test ‘$foo.bar‘ test"} <-- comprends $foo.bar

EXEMPLE PRATIQUE:{include file="subdir/$tpl_name.tpl"} <-- remplace $tpl_name avec la valeur{cycle values="one,two,‘$smarty.config.myval‘"} <-- doit comporter lesapostrophes inverses

8

Page 17: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 4. Variables

Smarty possède différents types de variables. Le type de ces variables dépend dusymbole qui les préfixe, ou des symboles qui les entourent.

Les variables de Smarty peuvent être soit affichées directement, soit utilisées commearguments pour les fonctions et modificateurs, à l’intérieur d’expressions condition-nelles, etc. Pour afficher une variable, il suffit de l’entourer par des délimiteurs detelle sorte qu’elle soit la seule chose qu’ils contiennent. Exemple :

{$Nom}

{$Contacts[enreg].Telephone}

<body bgcolor="{#bgcolor#}" >

Variables assignées depuis PHPPour utiliser une variables assignées depuis PHP, il faut la préfixer par le symboledollar $. Les variables asignées depuis un template grâce à la fonction assign sontmanipulées de la même façon.

Exemple 4-1. Variables assignées

Bienvenue {$prenom}, heureux de voir que tu es arrivé ici.<p>La dernière connexion remonte au {$dateConnexionPrecedente}.

SORTIE:

Bienvenue Doug, heureux de voir que tu est arrivé ici.<p>La dernière connexion remonte au 11 janvier 2001.

Tableaux associatifs

Vous pouvez également utiliser des variables sous forme de tableaux associatifs assi-gnées depuis PHP en en spécifiant la clef, après le symbole ’.’ (point).

Exemple 4-2. accéder aux variables de tableaux associatifs

index.php:

$smarty = new Smarty;$smarty- >assign(’Contacts’,

array(’fax’ => ’555-222-9876’,’email’ => ’[email protected]’,’phone’ => array(’home’ => ’555-444-3333’,

’cell’ => ’555-111-1234’)));$smarty- >display(’index.tpl’);

index.tpl:

{$Contacts.fax} <br >{$Contacts.email} <br >{* you can print arrays of arrays as well *}{$Contacts.phone.home} <br >{$Contacts.phone.cell} <br >

SORTIE:

9

Page 18: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 4. Variables

555-222-9876 <br >[email protected] <br >555-444-3333 <br >555-111-1234 <br >

Tableaux indexés

Vous pouvez utiliser des tableaux indexés de la même façon que vous le faites enPHP.

Exemple 4-3. Accès aux tableaux grâce à l’index

index.php:

$smarty = new Smarty;$smarty- >assign(’Contacts’,

array(’555-222-9876’,’[email protected]’,array(’555-444-3333’,

’555-111-1234’)));$smarty- >display(’index.tpl’);

index.tpl:

{$Contacts[0]} <br >{$Contacts[1]} <br >{* you can print arrays of arrays as well *}{$Contacts[2][0]} <br >{$Contacts[2][1]} <br >

SORTIE:

555-222-9876 <br >[email protected] <br >555-444-3333 <br >555-111-1234 <br >

Objets

Les attributs des objets assignés depuis PHP peuvent être utilisées en en spécifiant lenom après le symbole ’->’.

Exemple 4-4. accéder aux attributs des objets

nom: {$person- >name} <br >email: {$person- >email} <br >

SORTIE:

nom: Zaphod Beeblebrox <br >email: [email protected] <br >

10

Page 19: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 4. Variables

Variables chargées depuis des fichiers de configurationLes variables récupérées depuis un fichier de configuration sont utilisées entouréesdu symbole dièse (#), ou via la variable spéciale smarty $smarty.config.

Exemple 4-5. variables de fichiers de configuration

foo.conf:

pageTitle = "C’est le mien"bodyBgColor = "#eeeeee"tableBorderSize = "3"tableBgColor = "#bbbbbb"rowBgColor = "#cccccc"

index.tpl:

{config_load file="foo.conf"}<html ><title >{#pageTitle#} </title ><body bgcolor="{#bodyBgColor#}" ><table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}" ><tr bgcolor="{#rowBgColor#}" ><td >First </td ><td >Last </td ><td >Address </td >

</tr ></table ></body ></html >

index.tpl: (alternate syntax)

{config_load file="foo.conf"}<html ><title >{$smarty.config.pageTitle} </title ><body bgcolor="{$smarty.config.bodyBgColor}" ><table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgColor}" ><tr bgcolor="{$smarty.config.rowBgColor}" ><td >First </td ><td >Last </td ><td >Address </td >

</tr ></table ></body ></html >

SORTIE: (same for both examples)

<html ><title >C’est le mien </title ><body bgcolor="#eeeeee" ><table border="3" bgcolor="#bbbbbb" ><tr bgcolor="#cccccc" ><td >First </td ><td >Last </td ><td >Address </td >

</tr ></table ></body ></html >

11

Page 20: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 4. Variables

Les variables de fichier de configuration ne peuvent être utilisés tant qu’elles n’ontpas été chargées. Cette procédure est expliquée plus loin dans le document, voirconfig_load.

Variable réservée {$smarty}La variable réservée {$smarty} peut être utilisée pour accéder à plusieurs variablesspéciales du template. En voici la liste complète.

Variables de requête

Les variables de requête comme GET, POST, COOKIES, SERVER, ENVIRONNE-MENT et SESSION peuvent être utilisées comme dans l’exemple suivant:

Exemple 4-6. Afficher des variables de requête

{* Affiche la valeur de page dans l’url (GET) http://www.domain.com/index.php?page=foo *}{$smarty.get.page}

{* affiche la variable "page" récupérée depuis un formulaire (POST) *}{$smarty.post.page}

{* affiche la valeur du cookie "utilisateur" *}{$smarty.cookies.utilisateur}

{* affiche la variable serveur "SERVER_NAME" *}{$smarty.server.SERVER_NAME}

{* affiche la variable d’environnement "PATH" *}{$smarty.env.PATH}

{* affiche la variable de session PHP "id" *}{$smarty.session.id}

{* affiche la variable "utilisateur" du regroupement de get/post/cookies/server/env *}{$smarty.request.utilisateur}

{$smarty.now}

Le timestamp courant peut être récupéré grâce à {$smarty.now}. Le nombre obtenucorrespond au nombre de secondes écoulées depuis Epoch (1 Janvier 1970) et peutêtre passé directement au modificateur de variable date à des fins d’affichage.

Exemple 4-7. utilisation de {$smarty.now}

{* utilise le modificateur de variable date_format pour afficher la date et heure *}{$smarty.now|date_format:"%d-%m-%Y %H:%M:%S"}

{$smarty.const}

Vous pouvez directement accéder aux constantes PHP.

Exemple 4-8. Utiliser {$smarty.const}

{$smarty.const._MA_CONSTANTE_}

12

Page 21: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 4. Variables

{$smarty.capture}

La capture réalisée via {capture}..{/capture} peut être récupérée par l’intermédiairede la variable {$smarty}. Voir la section sur capture pour un exemple à ce sujet.

{$smarty.config}

La variable {$smarty} peut être utilisée pour désigner une variable d’un fichierde configuration. {$smarty.config.foo} est un synonyme de {#foo#}. Voir la sectionconfig_load pour un exemple à ce sujet.

{$smarty.section}, {$smarty.foreach}

La variable {$smarty} peut être utilisée pour accéder aux propriétés des boucles ’sec-tion’ et ’foreach’. Voir la documentation de section et foreach.

{$smarty.template}

Cette variable contient le nom du template en cours de traitement.

13

Page 22: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 4. Variables

14

Page 23: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

Les modificateurs de variables peuvent être appliqués aux variables, fonctions uti-lisateurs ou chaînes de caractères. Pour appliquer un modificateur de variable, tap-pez une valeure suivie de | (pipe) et du nom du modificateur. Un modificateur devariable est succeptible d’accepter des paramètres additionnels, qui en affectent lecomportement. Ces paramètres suivent le nom du modificateur et sont séparés parun : (deux points).

Exemple 5-1. Exemple de modificateur

{* Met le titre en majuscule *}<h2>{$title|upper} </h2 >

{* Tronque le sujet à 40 caractères, place des "..." à la fin *}Sujet: {$sujet|truncate:40:"..."}

{* formatage en chaîne *}{"now"|date_format:"%Y/%m/%d"}

{* application d’un modificateur à une fonction utilisateur *}{mailto|upper address="[email protected]"}

Si vous appliquez un modificateur de variable à un tableau plutôt qu’à une variablesimple, le modificateur sera appliqué à chaque valeur du tableau. Si vous souhai-tez que le modificateur travaille réellement avec le tableau en tant que tel, vous de-vez préfixer le nom du modificateur avec un symbole @comme ceci: {$titreAr-ticle|@count} (Affiche le nombre d’élements du tableau $titreArticle.)

capitalizeMet la première lettre de chaque mot d’une variable en majuscule.

Exemple 5-2. capitalize

index.php:

$smarty = new Smarty;$smarty- >assign(’titreArticle’, ’La police commence une campagne de sen-sibilisation contre la violence routière.’);$smarty- >display(’index.tpl’);

index.tpl:

{$titreArticle}{$titreArticle|capitalize}

SORTIE:

La police commence une campagne de sensibilisation contre la violence routière.La Police Commence Une Campagne De Sensibilisation Contre La Violence Routière.

count_charactersCompte le nombre de caractères dans une variable.

15

Page 24: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

Exemple 5-3. count_characters

index.php:

$smarty = new Smarty;$smarty- >assign(’titreArticle’, ’Vagues de froid liées à la température.’);$smarty- >display(’index.tpl’);

index.tpl:

{$titreArticle}{$titreArticle|count_characters}

SORTIE:

Vagues de froid liées à la température.39

cat

Position duparamètre

Type Requis cat Description

1 chaîne decaractères

Non empty Valeur àconcaténer à lavariabledonnée.

Cette valeur est concaténée à la variable donnée.

Exemple 5-4. cat

index.php:

$smarty = new Smarty;$smarty- >assign(’TitreArticle’, ’Les devins ont prévus que le monde ex-istera toujours ’);$smarty- >display(’index.tpl’);

index.tpl:

{$TitreArticle|cat:" demain."}

SORTIE:

Les devins ont prévus que le monde existera toujours demain.

count_paragraphsCompte le nombre de paragraphes dans une variable.

Exemple 5-5. count_paragraphs

index.php:

$smarty = new Smarty;$smarty- >assign(’TitreArticle’, ’La guerre apporte la paix, au prix de la vie de cer-tains innocents.’);$smarty- >display(’index.tpl’);

16

Page 25: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

index.tpl:

{$TitreArticle}{$TitreArticle|count_paragraphs}

SORTIE:

La guerre apporte la paix, au prix de la vie des innocents.1

count_sentencesCompte le nombre de phrases dans une variable.

Exemple 5-6. count_sentences

index.php:

$smarty = new Smarty;$smarty- >assign(’TitreArticle’, ’Deux navires rentrent encollision - Un des deux coule. Des vaches enragées blessent un fermier àcoups de haches.’);$smarty- >display(’index.tpl’);

index.tpl:

{$TitreArticle}{$TitreArticle|count_sentences}

SORTIE:Deux navires rentrent en collision- Un des deux coule. Des vaches enragées blessent un fermierà coups de haches.

2

count_wordsCompte le nombre de mots dans une variable.

Exemple 5-7. count_words

index.php:

$smarty = new Smarty;$smarty- >assign(’TitreArticle’, ’Un anneau pour les gouverner tous.’);$smarty- >display(’index.tpl’);

index.tpl:

{$titreArticle}{$titreArticle|count_words}

SORTIE:

Un anneau pour les gouverner tous.6

17

Page 26: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

date_format

Position duparamètre

Type Requis Defaut Description

1 chaîne decaractères

Non %b %e, %Y Format desortie de ladate.

2 chaîne decaractères

Non n/a Date par défautsi aucune n’estspécifiée enentrée.

Formate une date / heure au format strftime donné. Les dates peuvent être passées àsmarty en tant que timestamp unix, timestamp mysql ou comme chaîne quelconquecontenant mois jour année (interprétable par strtotime). Les concepteurs de templatespeuvent utiliser date_format pour contrôler parfaitement le format de sortie de ladate. Si la date passée à date_format est vide, et qu’un second paramètre est donné,ce dernier sera utilisé comme étant la date à formater.

Exemple 5-8. date_format

index.php:

$smarty = new Smarty;$smarty- >assign(’hier’, strtotime(’-1 day’));$smarty- >display(’index.tpl’);

index.tpl:

{$smarty.now|date_format}{$smarty.now|date_format:"%A, %B %e, %Y"}{$smarty.now|date_format:"%H:%M:%S"}{$hier|date_format}{$hier|date_format:"%A, %B %e, %Y"}{$hier|date_format:"%H:%M:%S"}

SORTIE:

Feb 6, 2001Tuesday, February 6, 200114:33:00Feb 5, 2001Monday, February 5, 200114:33:00

Exemple 5-9. date_format indicateurs de convertion

%a - Abréviation du jour de la semaine, selon les paramètres locaux.

%A - Nom du jour de la semaine, selon les paramètres locaux.

%b - Abréviation du nom du jour, selon les paramètres locaux.

%B - Nom complet du mois, selon les paramètres locaux.

%c - Préférences d’affichage selon les paramètres locaux.

%C - Siècle, (L’année divisée par 100 et tronquée comme un entier, de 00 à 99)

%d - Jour du mois, en tant que nombre décimal (de 00 à 31)

18

Page 27: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

%D - même chose que %m/%d/%y

%e - Jour du mois en tant que nombre décimal. Un chiffre unique est précédé parun espace (de 1 à 31)

%g - Position de la semaine dans le siècle [00,99]

%G - Position de la semaine, incluant le siècle [0000,9999]

%h - identique à %b

%H - L’heure en tant que décimale, en utilisant une horloge sur 24 (de 00 à 23)

%I - L’heure en tant que décimale en utilisant une horloge sur 12 (de 01 to 12)

%j - jour de l’année (de 001 à 366)

%k - Heure (horloge sur 24). Les numéros à un chiffre sont précédés d’un es-pace. (de 0 à 23)

%l - Heure (horloge sur 12). Les numéros à un chiffre sont précédés d’un es-pace. (de 1 à 12)

%m - Mois en tant que nombre décimal (de 01 à 12)

%M - Minute en tant que nombre décimal

%n - Retour chariot (nouvelle ligne).

%p - soit am soit pm selon l’heure donnée, ou alors leurs correspondances locales.

%r - heure en notation a.m. et p.m.

%R - Heure au format 24 heures

%S - Secondes en tant que nombre décimal.

%t - Caractère tabulation.

%T - Heure courante, équivalent à %H:%M:%S

%u - Jour de la semaine en tant que nombre décimal [1,7], ou 1 représente le lundi.

%U - Le numéro de la semaine en nombre décimal, utilisant le premier dimancheen tant que premier jour de la première semaine.

%V - Le numéro de la semaine de l’année courante selon la norme ISO 8601:1988,de 01 à 53, ou la semaine 1 est la première semaine qui dispose au minimumde 4 jours dans l’année courante et ou Lundi est le premier jourde cette semaine.

%w - Jour de la semaine en tant que nombre décimal, dimanche étant 0

%W - Le numéro de la semaine de l’année courante en tant que nombre décimal,ou Lundi est le premier jour de la première semaine.

%x - Représentation préférée de la date selon les paramètres locaux.

%X - Représentation préférée de l’heure selon les paramètres locaux, sans ladate.

%y - L’année en tant que nombre décimal, sans le siècle. (de 00 à 99)

%Y - L’année en tant que nombre décimal, avec le siècle.

19

Page 28: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

%Z - Zone horraire, nom ou abréviation

%% - Un caractère litéral ‘%’

NOTE AUX DEVELOPPEURS: date_format est un alias de la fonctionPHP strftime(). Il est probable que vous disposiez de plus ou moins d’optionsdisponibles selon le système sur lequel PHP a été compilé (strftime ()).Reportez vous à l’aide de votre système pour une liste complète desparamètres disponibles.

default

Position duparamètre

Type Requis Defaut Description

1 chaîne decaractères

Non empty La valeur pardéfaut de lasortie si lavariabled’entrée estvide.

Utilisé pour définir une valeur par défaut à une variable. Si la variable est vide ouindéfinie, la valeur donnée est affichée en lieu et place. Default attends un seul argu-ment.

Exemple 5-10. default

index.php:

$smarty = new Smarty;$smarty- >assign(’TitreArticle’, ’Les portes de la moria restent fermées.’);$smarty- >display(’index.tpl’);

index.tpl:

{$TitreArticle|default:"pas de titre"}{$monTitre|default:"pas de titre"}

SORTIE:

Les portes de la moria restent fermées.pas de titre

escape

Position duparamètre

Type Requis Valeurspossibles

Defaut Description

1 chaîne decaractère

Non html,htmlall, url,quotes, hex,hexentity,javascript

html Formatd’échappementà utiliser.

"Echappe" les caractères spéciaux html, d’url, pour les quotes d’une chaîne, les va-leurs hexadécimales, les entités hexadécimales ou javascript. Par défaut, ce paramètreest html.

20

Page 29: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

Exemple 5-11. escape

index.php:

$smarty = new Smarty;$smarty- >assign(’TitreArticle’, "’Stiff Opposition Expected to Casket-less Funeral Plan’");$smarty- >display(’index.tpl’);

index.tpl:

{$titreArticle}{$titreArticle|escape}{$titreArticle|escape:"html"} {* escapes & " ’ < > *}{$titreArticle|escape:"htmlall"} {* escapes ALL html entities *}{$titreArticle|escape:"url"}{$titreArticle|escape:"quotes"}<ahref="mailto:{$EmailAddress|escape:"hex"}" >{$EmailAddress|escape:"hexentity"} </a >

SORTIE:

’Stiff Opposition Expected to Casketless Funeral Plan’’Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan’’Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan’’Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan’’Stiff+Opposition+Expected+to+Casketless+Funeral+Plan’\’Stiff Opposition Expected to Casketless Funeral Plan\’<ahref="mailto:%62%6f%62%40%6d%65%2e%6e%65%74" >&#x62;&#x6f;&#x62;&#x40;&#x6d;&#x65;&#x2e;&#x6e;&#x65;&#x74; </a >

indent

Position duparamètre

Type Requis Defaut Description

1 entier Non 4 De combien decaractèresl’indentationdoit êtreeffectuée.

2 chaîne decaractère

Non (espace) Caractère àutiliser pourl’indentation.

Indente chacune des lignes d’une chaîne. Comme paramètre optionnel, vous pou-vez spécifier le nombre de caractères à utiliser pour l’indentation (4 par défaut).Comme second paramètre optionnel, vous pouvez spécifier le caractère à utiliserpour l’indentation (utilisez "\t" pour les tabulations).

Exemple 5-12. indent

index.php:

$smarty = new Smarty;$smarty- >assign(’TitreArticle’, ’Il fera noir cette nuit.’);$smarty- >display(’index.tpl’);

index.tpl:

{$TitreArticle}

21

Page 30: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

{$TitreArticle|indent}

{$TitreArticle|indent:10}

{$TitreArticle|indent:1:"\t"}

SORTIE:

Il fera noir cette nuit.

Il fera noir cette nuit.

Il fera noir cette nuit.

Il fera noir cette nuit.

lowerMet une variable en minuscules.

Exemple 5-13. lower

index.php:

$smarty = new Smarty;$smarty- >assign(’TitreArticle’, ’Deux Suspects Se Sont Sauvés.’);$smarty- >display(’index.tpl’);

index.tpl:

{$TitreArticle}{$TitreArticle|lower}

SORTIE:

Deux Suspects Se Sont Sauvés.deux suspects se sont sauvés.

nl2brTransforme toutes les fins de lignes en balises <br />. Equivalent à la fonction PHPnl2br().

Exemple 5-14. nl2br

index.php:

$smarty = new Smarty;$smarty- >assign(’TitreArticle’, "Pluie ou soleil attendu\naujourd’hui, nuit noire");$smarty- >display(’index.tpl’);

index.tpl:

{$TitreArticle|nl2br}

SORTIE:

Pluie ou soleil attendu <br / >aujourd’hui, nuit noire

22

Page 31: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

regex_replace

Position duparamètre

Type Requis Defaut Description

1 chaîne decaractère

Oui n/a Expressionrégulière àremplacer.

2 chaîne decaractère

Oui n/a La chaîne deremplacement.

Un rechercher / remplacer avec une expression régulière. Utilise la même syntaxeque la fonction PHP preg_replace.

Exemple 5-15. regex_replace

index.php:

$smarty = new Smarty;$smarty- >assign(’TitreArticle’, "L’infertilité est un maux grandissant\n, dis-ent les experts.");$smarty- >display(’index.tpl’);

index.tpl:

{* Remplace tous les retours chariot et les tabulation par une nouvelle ligne avec un es-pace *}

{$TitreArticle}{$TitreArticle|regex_replace:"/[\r\t\n]/":" "}

SORTIE:

L’infertilité est un maux grandissant, disent les experts.L’infertilité est un maux grandissant, disent les experts.

replace

Position duparamètre

Type Requis Defaut Description

1 chaîne decaractères

Oui n/a chaîne àremplacer.

2 chaîne decaractères

Oui n/a chaîne deremplacement.

Un simple remplacement de chaîne de caractères.

Exemple 5-16. replace

index.php:

$smarty = new Smarty;$smarty- >assign(’titreArticle’, "Child’s Stool Great for Use in Garden.");$smarty- >display(’index.tpl’);

index.tpl:

23

Page 32: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

{$titreArticle}{$titreArticle|replace:"Garden":"Vineyard"}{$titreArticle|replace:" ":" "}

SORTIE:

Child’s Stool Great for Use in Garden.Child’s Stool Great for Use in Vineyard.Child’s Stool Great for Use in Garden.

spacify

Position duparamètre

Type Requis Defaut Description

1 chaîne decaractère

Non espace Ce qui estinséré entrechaquecaractère de lavariable.

spacify est un moyen pour insérer un espace entre tous les caractères d’une variable.Optionnellement, vous pouvez lui passer un caractère (ou une chaîne) différent deespace à insérer.

Exemple 5-17. spacify

index.php:

$smarty = new Smarty;$smarty- >assign(’titreArticle’, ’Quelque chose s’est mal passé et à provoquécet accident, disent les experts’);$smarty- >display(’index.tpl’);

index.tpl:

{$titreArticle}{$titreArticle|spacify}{$titreArticle|spacify:"^^"}

SORTIE:

Quelquechose s’est mal passé et à provoqué cet accident, disent les experts.Q u e l q u e c h o s e s ’ e s t m a l p a s s é e t à p r o v o q u é c e t a c c i d e n t , d i s e n t l e s e x p e r t s .Q^^u^^e^^l^^q^^u^^e^^c^^h^^o^^s^^e^^ ^^s^^’^^e^^s^^t^^ ^^m^^a^^l^^ ^^p^^a^^s^^s^^é^^ ^^e^^t^^ ^^à^^ ^^p^^r^^o^^v^^o^^q^^u^^é^^ ^^c^^e^^t^^ ^^a^^c^^c^^i^^d^^e^^n^^t^^,^^ ^^d^^i^^s^^e^^n^^t^^ ^^l^^e^^s^^ ^^e^^x^^p^^e^^r^^t^^s^^.

string_format

Position duparamètre

Type Requis Defaut Description

1 chaîne decaractères

Oui n/a Le format àutiliser (sprintf)

Un moyen pour formater les chaînes de caractères, comme par exemple les nombresdécimaux. Utilise la syntaxe de sprintf pour formater les éléments.

24

Page 33: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

Exemple 5-18. string_format

index.php:

$smarty = new Smarty;$smarty- >assign(’nombre’, 23.5787446);$smarty- >display(’index.tpl’);

index.tpl:

{$nombre}{$nombre|string_format:"%.2f"}{$nombre|string_format:"%d"}

SORTIE:

23.578744623.5824

stripRemplace les espaces multiples, les nouvelles lignes et les tabulations par un espacesimple, ou une chaîne donnée.

Note : Si vous voulez réaliser cette action sur un bloc complet du template, utilisez lafonction strip.

Exemple 5-19. strip

index.php:

$smarty = new Smarty;$smarty- >assign(’titreArticle’, "Une réunion autour\n d’un feu de cheminée\test toujours agréable.");$smarty- >display(’index.tpl’);

index.tpl:

{$titreArticle}{$titreArticle|strip}{$titreArticle|strip:"&nbsp;"}

SORTIE:

Une réunion autourd’un feu de cheminée est toujours agréable.

Une réunion autour d’un feu de cheminée est toujours agréable.Une&nbsp;réunion&nbsp;autour&nbsp;d’un&nbsp;feu&nbsp;de&nbsp;cheminée&nbsp;est&nbsp;toujours&nbsp;agréable.

strip_tagsSupprime toutes les balises, et plus généralement tout ce qui se trouve entre < et >.

25

Page 34: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

Exemple 5-20. strip_tags

index.php:

$smarty = new Smarty;$smarty- >assign(’titreArticle’, "Une femme aveugle obtient un nouveau <font face=\"helvetica\" >rein </font > d’un père qu’elle n’a pas vu depuis <b> des années </b >.");$smarty- >display(’index.tpl’);

index.tpl:

{$titreArticle}{$titreArticle|strip_tags}

SORTIE:

Une femme aveugle obtient un nouveau <font face=\"helvetica\" >rein </font > d’un père qu’elle n’a pas vu depuis <b> des années </b >.Une femme aveugle obtient un nouveau rein d’un pèrequ’elle n’a pas vu depuis des années.

truncate

Position duparamètre

Type Requis Defaut Description

1 entier Non 80 Le nombre decaractèresmaximumsau-delà duquelon effectue letroncage

2 chaîne decaractère

Non ... Le texte àrajouter lorsquel’on effectue untroncage.

3 booléen Non false Détermine si letroncage esteffectué sur ledernier mot(false), ou aucaractère exact(true).

Tronque une variable à une certaine longueur, par défaut 80. Un second paramètreoptionnel permet de spécifier une chaîne à afficher à la fin de la variable une foistronquée. Les caractères de fin sont inclus dans la longueur de la chaîne à tronquer.Par défaut, truncate tentera de couper la chaîne à la fin d’un mot. Si vous vouleztronquer la chaîne au caractère exact, donnez la valeur true au dernier paramètreoptionnel.

Exemple 5-21. truncate

index.php:

$smarty = new Smarty;$smarty- >assign(’titreArticle’, ’Deux soeurs réunies après 18 ans de séparation.’);$smarty- >display(’index.tpl’);

26

Page 35: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

index.tpl:

{$titreArticle}{$titreArticle|truncate}{$titreArticle|truncate:30}{$titreArticle|truncate:30:""}{$titreArticle|truncate:30:"---"}{$titreArticle|truncate:30:"":true}{$titreArticle|truncate:30:"...":true}

SORTIE:

Deux soeurs réunies après 18 ans de séparation.Deux soeurs réunies après...Deux soeurs réunies aprèsDeux soeurs réunies après---Deux soeurs réunies après 18 aDeux soeurs réunies après 1...

upperMet une variable en majuscules.

Exemple 5-22. upper

index.php:

$smarty = new Smarty;$smarty- >assign(’titreArticle’, "Si l’attaque n’est pas mise en placerapidement, cela risque de durer longtemps.");$smarty- >display(’index.tpl’);

index.tpl:

{$titreArticle}{$titreArticle|upper}

SORTIE:

Si l’attaque n’est pas mise en place rapidement, cela risque de durer longtemps.SI L’ATTAQUE N’EST PAS MISE EN PLACE RAPIDEMENT, CELA RISQUE DE DURER LONGTEMPS.

wordwrap

Position duparamètre

Type Requis Defaut Description

1 entier Non 80 La nombre decolonnes surlequel ajusterl’affichage.

2 chaîne decaractères

Non \n chaîne decaractèresutilisée pourl’ajustement.

27

Page 36: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 5. Modificateurs de variables

Position duparamètre

Type Requis Defaut Description

3 booléen Non false Détermine sil’ajustement sefait en fin demot (false) ouau caractèreexact (true).

Ajuste une chaîne de caractères à une taille de colonne, par défaut 80. Un secondparamètre optionnel vous permet de spécifier la chaîne à utiliser pour l’ajustementà la nouvelle ligne (retour chariot \n par défaut). Par défaut, wordwrap tente unajustement à la fin d’un mot. Si vous voulez autoriser le découpage des mots pourun ajustement au caractère près, passez true au troisième paramètre optionnel.

Exemple 5-23. wordwrap

index.php:

$smarty = new Smarty;$smarty- >assign(’titreArticle’, "Une femme aveugle obtient un nouveau reind’un père qu’elle n’a pas vu depuis des années.");$smarty- >display(’index.tpl’);

index.tpl:

{$titreArticle}

{$titreArticle|wordwrap:30}

{$titreArticle|wordwrap:20}

{$titreArticle|wordwrap:30:" <br >\n"}

{$titreArticle|wordwrap:30:"\n":true}

SORTIE:

Une femme aveugle obtient un nouveau rein d’un père qu’elle n’a pas vu depuis des années.

Une femme aveugle obtient unnouveau rein d’un pèrequ’elle n’a pas vu depuisdes années.

Une femme aveugleobtient un nouveaurein d’un pèrequ’elle n’a pas vudepuis des années.

Une femme aveugle obtient un <br >nouveau rein d’un père <br >qu’elle n’a pas vu depuis <br >des années.

Une femme aveugle obtient un nouveau rein d’un père qu’ellen’a pas vu depuis des années.

28

Page 37: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 6. Combiner des modificateurs de variable.

Vous pouvez appliquer un nombre quelquonque de modificateurs à une variable. Ilsseront invoqués dans l’ordre d’apparition, de la gauche vers la droite. Ils doivent êtreséparés par un | (pipe).

Exemple 6-1. Combiner des modificateurs

index.php:

$smarty = new Smarty;$smarty- >assign(’titreArticle’, ’Les fumeurs sont productifs, mais la morttue l’efficacitée.’);$smarty- >display(’index.tpl’);

index.tpl:

{$titreArticle}{$titreArticle|upper|spacify}{$titreArticle|lower|spacify|truncate}{$titreArticle|lower|truncate:30|spacify}{$titreArticle|lower|spacify|truncate:30:". . ."}

SORTIE:

Les fumeurs sont productifs, mais la mort tue l’efficacitée.L E S F U M E U R S S O N T P R O D U C T I F S , M A I S L A M O R T T U E L ’ E F F I C A C I T É E .L E S F U M E U R S S O N T P R O D U C T I F S , M A I S L A M...L E S F U M E U R S S O N T P R O D U C T I F S , M A I S L A M...L e s f u m e u r s s o n t p r o d u c t i f s , . . .L e s f u m e u r s s. . .

29

Page 38: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 6. Combiner des modificateurs de variable.

30

Page 39: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

Smarty est fourni en standard avec plusieurs fonctions natives. Les fonctions nativessont partie intégrante du language de template. Vous ne pouvez pas créer de fonc-tions utilisateurs qui portent le même nom qu’une fonction native. Vous ne pouvezpas non plus en modifier le comportement.

captureCapture est utilisé pour récupérer la sortie d’éléments dans une variable au lieu deles afficher. Tout contenu situé entre {capture name="foo"} et {/capture} est interceptédans une variable dont le nom est spécifié dans l’attribut name. Le contenu capturépeut être utilisé dans le template par l’intermédiaire de la variable spéciale $smar-ty.capture.foo ou foo est la valeur de l’attribut name. Si vous ne donnez pas de valeurà l’attribut name, alors "default" est utilisé. Toutes les commandes {capture} doiventêtre utilisées de paire avec {/capture}. Vous pouvez imbriquer les demandes de cap-tures.

Note technique : Smarty 1.4.0 - 1.4.4 plaçait les contenus capturés dans une variableappelée $return. Depuis Smarty 1.4.5, ce comportement à été modifié et Smarty utilisemaintenant l’attribut name en lieu et place. Veuillez donc mettre vos templates à jour seloncette règle.

AttentionFaites attention lorsque vous interceptez la sortie de commandes in-sert . Si vous avez configuré le cache pour que ce dernier soit actif, etque vous avez des commandes insert supposées s’exécuter dans uncontenu en cache, ne tentez pas de capturer ce contenu.

Exemple 7-1. Capturer le contenu d’un template.

{* nous ne voulons afficher une ligne que si cette dernière est acti-vé. *}{capture name=banner}{include file="get_banner.tpl"}{/capture}{if $smarty.capture.banner ne ""}<tr ><td >

{$smarty.capture.banner}</td >

</tr >{/if}

config_load

Nom attribut Type Requis Defaut Description

file chaîne decaractère

Oui n/a Le nom dufichier deconfiguration àinclure

31

Page 40: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

Nom attribut Type Requis Defaut Description

section chaîne decaractère

Non n/a Le nom de lasection àcharger

scope chaîne decaractère

non local La façon dontla portée desvariables estdéfinie, soitlocal, parent ouglobal. localsignifie que lavariable estchargée dans lecontexte dutemplate.parent indiqueque la variableest disponibletant dans letemplate qui l’ainclus que dansle templateparent, ayantréalisél’inclusion dusous template.global signifieque la variableest diponibledans tous lestemplates.

global booléen Non No Si oui ou nonles variablessontdisponiblespour lestemplatesparents,identique àscope=parent.Note: Cetattribut estobsolète depuisl’apparition del’attribut scope,il est toutefoistoujourssupporté. Siscope est défini,global estignoré.

Cette fonction est utiliseé pour charger des variables de fichier de configuration dansun template. Voir Fichiers de configuration pour de plus amples informations.

Exemple 7-2. fonction config_load

{config_load file="colors.conf"}

32

Page 41: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

<html ><title >{#pageTitle#} </title ><body bgcolor="{#bodyBgColor#}" ><table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}" ><tr bgcolor="{#rowBgColor#}" ><td >First </td ><td >Last </td ><td >Address </td >

</tr ></table ></body ></html >

Les fichiers de configuration peuvent contenir des sections. Vous pouvez charger desvariables d’une section donnée avec le nouvel attribut section.

NOTE: Les sections des fichiers de configuration et la fonction native section n’ont rienen commun, il s’avère simplement qu’elles portent le même nom.

Exemple 7-3. fonction config_load et section

{config_load file="colors.conf" section="client"}

<html ><title >{#pageTitle#} </title ><body bgcolor="{#bodyBgColor#}" ><table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}" ><tr bgcolor="{#rowBgColor#}" ><td >First </td ><td >Last </td ><td >Address </td >

</tr ></table ></body ></html >

foreach,foreachelse

Nom attribut Type Requis Defaut Description

from chaîne decaractère

oui n/a Le nom dutableau àparcourir

item chaîne decaractère

Oui n/a Le nom de lavariable"élémentcourant"

key chaîne decaractère

Non n/a Le nom de lavariablereprésentant laclef courante.

name chaîne decaractère

Non n/a Le nom de laboucle foreach,qui nouspermettrad’accéder à sespropriétés.

33

Page 42: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

Les boucles foreach sont une alternative aux boucles section. Les boucles foreach sontutilisées pour parcourir des tableaux associatifs simples. La syntaxe des boucles fo-reach est bien plus simple que celle des boucles section, mais en contrepartie, elles nepeuvent être utilisées que pour des tableaux associatifs simples. La balise foreach doittoujours être accompagnée de la balise /foreach. Les paramètres requis sont from etitem. Le nom des boucles foreach doit être composés exclusivement de lettres, chiffreset underscores, selon vos préférences. Les boucles foreach peuvent être imbriquées. Lavariable from (généralement le tableau à parcourir) détermine le nombre de fois queforeach sera exécuté. foreachelse est exécuté si aucune valeur n’est présente dans lavariable donnée à l’attribut from.

Exemple 7-4. foreach

{* Cet exemple affiche toutes les valeurs du tableau $custid *}{foreach from=$custid item=curr_id}

id: {$curr_id} <br >{/foreach}

SORTIE:

id: 1000 <br >id: 1001 <br >id: 1002 <br >

Exemple 7-5. foreach key

{* key contient la clef de chaque élément parcouru

l’attribution des élément est de la forme:

$smarty->assign("contacts", array(array("tel" = > "1", "fax" = > "2", "portable" = > "3"),array("tel" = > "555-4444", "fax" = > "555-3333", "portable" = > "760-

1234")));

*}

{foreach name=outer item=contact from=$contacts}{foreach key=key item=item from=$contact}

{$key}: {$item} <br >{/foreach}

{/foreach}

SORTIE:

tel: 1 <br >fax: 2 <br >portable: 3 <br >tel: 555-4444 <br >fax: 555-3333 <br >portable: 760-1234 <br >

include

Nom attribut Type Requis Defaut Description

file chaîne decaractères

Oui n/a Le nom dutemplate àinclure

34

Page 43: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

Nom attribut Type Requis Defaut Description

assign chaîne decaractères

Non n/a Le nom de lavariable danslaquelle seraassignée lasortie deinclude

[var ...] [type devariable]

Non n/a Variables àpasser autemplate

Les balises "include" sont utilisées pour inclure des templates à l’intérieur d’autrestemplates. Toutes les variables disponibles dans le template réalisant l’inclusion sontdisponibles dans le template inclus. La balise include doit disposer de l’attribut "file",qui contient le chemin de la ressource template.

Vous pouvez spécifier un attribut optionnel assign qui définit une variable de tem-plate dans laquelle la sortie de include sera stockée plutôt qu’affichée.

Exemple 7-6. fonction include

{include file="header.tpl"}

{* Le corp du template va ici *}

{include file="footer.tpl"}

Vous pouvez également passer des variables au template inclus sous formed’attributs. Les variables passées au template par ce moyen ne sont accessibles quedans la portée de ce dernier. Les variables passées en tant qu’attribut remplacent lesvariables déjà définies, qui auraient le même nom.

Exemple 7-7. fonction include, passage de variables

{include file="header.tpl" title="Menu principal" table_bgcolor="#c0c0c0"}

{* Le corps du template vient ici *}

{include file="footer.tpl" logo="http://mon.domaine.com/logo.gif"}

Utilisez la syntaxe ressource template pour inclure des fichiers situés en dehors durépertoire $template_dir.

Exemple 7-8. fonction include, exemple de ressource template

{* chemin absolu *}{include file="/usr/local/include/templates/header.tpl"}

{* chemin absolu (même chose) *}{include file="file:/usr/local/include/templates/header.tpl"}

{* chemin absolu windows (DOIT utiliser le préfixe "file:") *}{include file="file:C:/www/pub/templates/header.tpl"}

{* inclusion d’une ressource template "db" *}{include file="db:header.tpl"}

35

Page 44: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

include_php

Nom attribut Type Requis Defaut Description

file chaîne decaractère

oui n/a Le nom dufichier PHP àinclure

once boléen Non true Inclureplusieurs foisou non lefichier PHP siplusieursdemandesd’inclusionssont faites.

assign chaîne decaractère

Non n/a le nom de lavariable PHPdans laquelle lasortie seraassignée plutôtquedirectementaffichée.

les balises include_php sont utilisées pour inclure directement un script PHP dansvos templates. Si "security" est activé, alors le script à exécuter doit être placé dansle chemin $trusted_dir. La balise include_php attends l’attribut "file", qui contient lechemin du fichier PHP à inclure, relatif à $trusted_dir, ou absolu.

include_php est un moyen agréable pour gérer des "composants templates", tout enconservant le code PHP en dehors du template lui même. Supposons que vous ayezun template reprenant la navigation de votre site, elle même récupérée depuis unebase de données. Vous pouvez conserver la logique du code PHP récupérant le conte-nu de la base dans un emplacement séparé, et l’inclure depuis votre template. Main-tenant, vous pouvez utiliser ce template n’importe ou, sans vous inquiéter de savoirsi les informations nécessaires ont bien étés assignées par l’application, avant la de-mande d’affichage.

Par défaut, les fichiers PHP ne sont inclus qu’une seule fois, même si la demanded’inclusion survient plusieurs fois dans le template. Vous pouvez demander à ce quece fichier soit inclus à chaque demande grâce à l’attribut once. Mettre l’attribut onceà false aura pour effet d’inclure le script PHP à chaque fois que demandé dans letemplate.

Vous pouvez donner une valeur à l’attribut optionnel assign, pour demander à lafonction include_php d’assigner la sortie du script PHP à la variable spécifiée plutôtque d’en afficher directement le résultat.

L’objet Smarty est disponible en tant que $this dans le script PHP inclus.

Exemple 7-9. fonction include_php

load_nav.php-------------

<?php

// charge des variables depuis une base de données mysql et les assigne au template.require_once("MySQL.class.php");$sql = new MySQL;$sql->query("select * from site_nav_sections order by name",SQL_ALL);

36

Page 45: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

$this->assign(’sections’,$sql->record);

?>

index.tpl---------

{* chemin absolu, ou relatif à $trusted_dir *}{include_php file="/path/to/load_nav.php"}

{foreach item="curr_section" from=$sections}<a href="{$curr_section.url}" >{$curr_section.name} </a ><br >

{/foreach}

insert

Nom attribut Type Requis Defaut Description

name chaîne decaractères

Oui n/a le nom de lafonction insert(insert_name)

assign chaîne decaractère

Non n/a Le nom de lavariable quirecevra la sortie

script chaîne decaractères

Non n/a Le nom duscript PHPinclus avantque la fonctioninsert ne soitappelée.

[var ...] [var type] Non n/a Variable àpasser à lafonction insert

Les balises insert fonctionnent à peu près comme les balises include, à l’exception queleur sortie n’est pas placée en cache lorsque le cache [caching] est activé. Les balisesinsert seront exécutées à chaque appel du template.

Supposons que vous avez un template avec un emplacement pour un bandeau pu-blicitaire en haut de page. Ce bandeau publicitaire peut contenir toutes sortes decontenus HTML, images, flash, etc. Nous ne pouvons pas placer du contenu statiqueà cet endroit. Nous ne voulons pas non plus que ce contenu fasse partie du cache. Ar-rive alors la balise insert. Le template connais #emplacement_bandeau# et #id_site#(récupérés depuis un fichier de configuration), et à besoin d’un appel de fonctionpour récupérer le contenu du bandeau.

Exemple 7-10. function insert

{* exemple de récupération d’un bandeau publicitaire *}{insert name="getBanner" lid=#emplacement_bandeau# sid=#id_site#}

Dans cet exemple, nous utilisons le nom getBanner et lui passons les paramètres#emplacement_bandeau# et #id_site#. Smarty va rechercher une fonctionappelée insert_getBanner () dans votre application PHP, et lui passer les valeurs#banner_location_id# et #site_id# comme premier paramètre, dans un tableauassociatif. Tous les noms des fonctions insert de votre application doivent être

37

Page 46: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

prefixées de "insert_" pour remédier à d’éventuels conflits de nommage. Votrefonction insert_getBanner () est supposée traiter les valeurs passées et retourner unrésultat. Ces résultats sont affichés dans le template en lieu et place de la balise.Dans cet exemple, Smarty appellera cette fonction insert_getBanner(array("lid" =>"12345","sid" => "67890")); et affichera le résultat retourné à la place de la baliseinsert.

Si vous donnez une valeur à l’attribut "assign", la sortie de la balise insert sera assignéà une variable de template de ce nom au lieu d’être affichée directement. NOTE:assigner la sortie à une variable n’est pas très utile lorsque le cache est activé.

Si vous donnez une valeur à l’attribut "script", ce script PHP sera inclus (une seulefois) avant l’exécution de la fonction insert. Le cas peut survenir lorsque la fonctioninsert n’existe pas encore, et que le script PHP chargé de sa définission doit être in-clus. Le chemin doit être absolu ou relatif à $trusted_dir. Lorsque "security" est actif,le script doit être situé dans $trusted_dir.

L’objet Smarty est passé comme second argument. De cette façon, vous pouvez uti-liser ou modifier des informations sur l’objet Smarty, directement depuis votre fonc-tion d’insertion.

Note technique : Il est possible d’avoir des portions de template qui ne soient pasgérables par le cache. Même si vous avez activé l’option caching, les balises insert neferont pas partie du cache. Elles retourneront un contenu dynamique à chaque invoca-tion de la page. Cette méthode est très pratique pour des éléments tels que les bandeauxpublicitaires, les enquêtes, la météo, les résultats de recherche, retours utilisateurs, etc.

if,elseif,elsel’instruction if dans Smarty dispose de la même flexibilité que l’instruction PHP dumême nom, avec quelques fonctionnalités supplémentaires pour le moteur de tem-plate. Tous les if doivent être utilisés de pair avec un /if . else et elseif sont égale-ment des balises autorisées. "eq", "ne","neq", "gt", "lt", "lte", "le", "gte" "ge","is even","isodd", "is not even","is not odd","not","mod", "div by","even by","odd by","==","!=",">","<","<=",">=" sont tous des opérateurs conditionnels valides, et doivent obligatoire-ment être séparés des autres éléments par des espaces.

Exemple 7-11. Instruction if

{if $name eq "Fred"}Bienvenue, Monsieur.

{elseif $name eq "Wilma"}Bienvenue m’dame.

{else}Bienvenue, qui que vous soyez.

{/if}

{* Un exemple avec l’opérateur or *}{if $name eq "Fred" or $name eq "Wilma"}

...{/if}

{* même chose que ci-dessus *}{if $name == "Fred" || $name == "Wilma"}

...{/if}

{* l’exemple suivant NE fonctionne PAS, les opérateursdoivent être entourés d’espaces. *}

{if $name=="Fred" || $name=="Wilma"}

38

Page 47: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

...{/if}

{* les parenthèses sont autorisées *}{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}

...{/if}

{* vous pouvez également faire appel aux fonctions PHP *}{if count($var) gt 0}

...{/if}

{* teste si les valeurs sont paires(even) ou impaires(odd) *}{if $var is even}

...{/if}{if $var is odd}

...{/if}{if $var is not odd}

...{/if}

{* teste si la variable est divisble par 4 *}{if $var is div by 4}

...{/if}

{* teste si la variable est paire, par groupe de deux i.e.,0=paire, 1=paire, 2=impaire, 3=impaire, 4=paire, 5=paire, etc. *}{if $var is even by 2}

...{/if}

{* 0=paire, 1=paire, 2=paire, 3=impaire, 4=impaire, 5=impaire, etc. *}{if $var is even by 3}

...{/if}

ldelim,rdelimldelim et rdelim sont utilisés pour afficher les délimiteurs en tant que tels, dans notrecas "{" ou "}". Le moteur de template tentera toujours d’interpréter le contenu entre lesdélimiteurs, c’est donc une façon d’afficher ces derniers sans interférer avec Smarty.

Exemple 7-12. ldelim, rdelim

{* Affiche les délimiteurs de template *}

{ldelim}nomFonction{rdelim} est la façon dont sont appelées les fonc-tions dans Smarty !

SORTIE:

{nomFonction} est la façon dont sont appelées les fonctions dans Smarty !

39

Page 48: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

literalLes balises "literal" permettent à un bloc de données d’être pris tel quel, sans qu’il nesoit interprété par Smarty. Très pratique lors de l’emplois d’éléments tels que javas-cript, acolades et autres qui peuvent confondre le moteur de template. Tout le conte-nu situé entre les balises {literal}{/literal} ne sera pas interprété, et affiché comme ducontenu statique.

Exemple 7-13. balises literal

{literal}<script language=javascript >

<!--function isblank(field) {if (field.value == ”)

{ return false; }else

{document.loginform.submit();return true;}

}// -- >

</script >{/literal}

phpLes balises PHP permettent de rajouter du code PHP directement dans le template.Ils ne seront pas ignorés, quelle que soit la valeur de $php_handling. Pour les utilisa-teurs avancés seulement, son utilisation n’est normalement pas nécessaire.

Exemple 7-14. balises php

{php}// inclusion directe d’un script PHP// depuis le template.include("/path/to/display_weather.php");

{/php}

section,sectionelse

Nom attribut Type Requis Defaut Description

name chaîne decaractère

Oui n/a Le nom de lasection

loop[$nom_variable]

Oui n/a le nom de lavariable quidétermine lenombre de foisque la bouclesera exécutée.

40

Page 49: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

Nom attribut Type Requis Defaut Description

start entier Non 0 La position del’index ou lasectioncommencerason parcours. Sila valeurdonnée estnégative, laposition dedépart estcalculée depuisla fin dutableau. Parexemple, s’ilexiste 7 valeursdans le tableauà parcourir etque start est à-2, l’index dedépart sera 5.Les valeursincorrectes (endehors de laportée dutableau) sontautomatique-mentstronquées à lavaleur correctela plus proche.

step entier Non 1 La valeur dupas qui serautilisé pourparcourir letableau.Parexemple,step=2parcourera lesindices 0,2,4,etc. Si step estnégatif, letableau seraparcouru ensens inverse.

max entier Non 1 Définit lenombremaximum defois que letableau seraparcouru.

show booléen Non true Détermine s’ilest nécessaired’afficher lasection ou non.

Les balises section sont utilisées pour parcourir un tableau de données. Toutes lesbalises section doivent être utilisées de paire avec les balises /section. Les paramètres

41

Page 50: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

requis sont name et loop. Le nom de la section est, selon votre choix, composé delettres, chiffres et underscores. Les sections peuvent être imbriquées, mais leurs nomsdoivent être uniques. La variable de parcours (généralement un tableau de données)détermine le nombre de fois que la section sera parcourue. Lorsque l’on affiche unevariable dans une section, le nom de la section doit précéder la variable entre cro-chets. sectionelse est exécuté lorsqu’aucune valeur n’est trouvée dans la variable àparcourir.

Exemple 7-15. section

{* Cet exemple va afficher toutes les valeurs du tableau $custid *}{section name=client loop=$custid}

id: {$custid[client]} <br >{/section}

SORTIE:

id: 1000 <br >id: 1001 <br >id: 1002 <br >

Exemple 7-16. section, variable de parcours

{* La variable de parcours détermine uniquement le nombre de fois que nous al-lons

rentrer dans la boucle. Vous pouvez accéder à toutes les variables du templatelorsque vous êtes dans une section. Cet exemple part du principe que$idClient, $noms et $adresses sont tous des tableaux qui contiennentautant de valeurs les uns que les autres.*}

{section name=client loop=$custid}id: {$idClient[client]} <br >nom: {$noms[client]} <br >addresse: {$addresses[client]} <br ><p>

{/section}

SORTIE:

id: 1000 <br >nom: John Smith <br >addresse: 253 N 45th <br ><p>id: 1001 <br >nom: Jack Jones <br >addresse: 417 Mulberry ln <br ><p>id: 1002 <br >nom: Jane Munson <br >addresse: 5605 apple st <br ><p>

Exemple 7-17. nom de section

{* Le nom de la section peut être ce que vous voulez,et est utilisé pour référencer les données depuis la section. *}

{section name=monTableau loop=$idClient}id: {$idCLient[monTableau]} <br >name: {$noms[monTableau]} <br >address: {$addresses[monTableau]} <br ><p>

{/section}

42

Page 51: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

Exemple 7-18. sections imbriquées

{* Les sections peuvent être imbriquées à un nombre de niveaux illim-ité.

Grâce aux sections imbriquées, vous pouvez accéder à des structures de donnéescomplexes, comme des tableaux multi-dimentionnels. Dans cet exemple,$type_contact[client] est un tableau de type de contact pour le clientcourant. *}

{section name=client loop=$custid}id: {$idClient[client]} <br >nom: {$nom[client]} <br >addresse: {$addresse[client]} <br >{section name=contact loop=$type_contact[client]}

{$type_contact[client][contact]}: {$info_contact[client][contact]} <br >{/section}<p>

{/section}

SORTIE:

id: 1000 <br >nom: John Smith <br >addresse: 253 N 45th <br >telephone: 555-555-5555 <br >telephone portable: 555-555-5555 <br >e-mail: [email protected] <br ><p>id: 1001 <br >nom: Jack Jones <br >addresse: 417 Mulberry ln <br >telephone: 555-555-5555 <br >telephone portable: 555-555-5555 <br >e-mail: [email protected] <br ><p>id: 1002 <br >nom: Jane Munson <br >addresse: 5605 apple st <br >telephone: 555-555-5555 <br >telephone portable: 555-555-5555 <br >e-mail: [email protected] <br ><p>

Exemple 7-19. Sections et tableaux associatifs

{* Exemple d’affichage d’un tableau associatif dans une section *}{section name=client loop=$contacts}

nom: {$contacts[client].name} <br >telephone: {$contacts[client].home} <br >portable: {$contacts[client].cell} <br >e-mail: {$contacts[client].email} <p>

{/section}

SORTIE:

nom: John Smith <br >telephone: 555-555-5555 <br >portable: 555-555-5555 <br >e-mail: [email protected] <p>nom: Jack Jones <br >telephone: 555-555-5555 <br >portable: 555-555-5555 <br >e-mail: [email protected] <p>nom: Jane Munson <br >

43

Page 52: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

telephone: 555-555-5555 <br >portable: 555-555-5555 <br >e-mail: [email protected] <p>

Exemple 7-20. sectionelse

{* sectionelse est exécuté s’il n’existe aucune valeur dans idClient *}{section name=client loop=$idClient}

id: {$idClient[client]} <br >{sectionelse}

Aucune valeur dans $idClient.{/section}

Les sections ont leur propre variable de gestion des propriétés. Elles sont de la forme:{$smarty.section.nomSection.nomVariable}

NOTE: Depuis Smarty 1.5.0, la syntaxe pour les propiétés des sections a été changéede {%sectionname.varname%} à {$smarty.section.nomSection.nomVariable}.L’ancienne syntaxe est toujours supportée, mais vous ne verrez que des exemplesavec la nouvelle syntaxe dans le manuel.

index

Index est utilisé pour afficher l’index de parcours courant, commence par 0 (oul’attribut start), et s’incrémente de 1 (ou de la valeur de l’attribut step).

Note technique : Si les attributs step et start ne sont pas modifiés, alors index fonctionnede la même façon que iteration, à l’exception qu’il commence par 0 plutôt que par 1.

Exemple 7-21. propriété de section index

{section name=client loop=$idClient}{$smarty.section.client.index} id: {$idClient[client]} <br >{/section}

SORTIE:

0 id: 1000 <br >1 id: 1001 <br >2 id: 1002 <br >

index_prev

index_prev est utilisé pour afficher l’index de parcours précédent de la boucle. Aupremier passage, il vaut -1.

Exemple 7-22. propriété de section index_prev

{section name=client loop=$custid}{$smarty.section.client.index} id: {$idClient[client]} <br >{* Pour votre information, $idClient[client.index] and $idClient[client] sont iden-

tiques *}{if $idClient[client.index_prev] ne $idClient[client.index]}

L’id du client à été modifié <br >{/if}{/section}

44

Page 53: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

SORTIE:

0 id: 1000 <br >L’id du client à été modifié <br >

1 id: 1001 <br >L’id du client à été modifié <br >

2 id: 1002 <br >L’id du client à été modifié <br >

index_next

index_next est utilisé pour afficher la valeur théorique suivante de index. Dans ladernière boucle, cela reste la valeur incrémentée, qui respecte l’attribut step si donné.

Exemple 7-23. propriété de section index_next

{section name=client loop=$idClient}{$smarty.section.client.index} id: {$idClient[client]} <br >{* Pour votre information, $idClient[client.index] and $idClient[client] sont iden-

tiques *}{if $idClient[client.index_next] ne $idClient[client.index]}

L’id du client va changer <br >{/if}{/section}

SORTIE:

0 id: 1000 <br >L’id du client va changer <br >

1 id: 1001 <br >L’id du client va changer <br >

2 id: 1002 <br >L’id du client va changer <br >

iteration

iteration est utilisé pour afficher la valeur courante de l’iteration.

NOTE: Cette valeur n’est pas affectée par les attributs start, step et max, à l’inversede la propriété index. L’itération commence par 1 et non par 0 (comme le fait index).rownum est un alias de iteration, ils fonctionnent de la même façon.

Exemple 7-24. propriété iteration de section

{section name=client loop=$idClient start=5 step=2}Iteration courante: {$smarty.section.client.iteration} <br >{$smarty.section.client.index} id: {$idClient[client]} <br >{* Pour votre information, $idClient[client.index] and $idClient[client] sont iden-

tiques *}{if $idCLient[client.index_next] ne $idClient[client.index]}

L’id du client va changer <br >{/if}{/section}

SORTIE:

Iteration courante: 15 id: 1000 <br >

45

Page 54: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

L’id du client va changer <br >Iteration courante: 27 id: 1001 <br >

L’id du client va changer <br >Iteration courante: 39 id: 1002 <br >

L’id du client va changer <br >

first

first est à true lorsque la section est parcouru pour la première fois.

Exemple 7-25. propriété first de la section

{section name=client loop=$idClient}{if $smarty.section.client.first}

<table >{/if}

<tr ><td >{$smarty.section.client.index} id:{$idClient[client]} </td ></tr >

{if $smarty.section.client.last}</table >

{/if}{/section}

SORTIE:

<table ><tr ><td >0 id: 1000 </td ></tr ><tr ><td >1 id: 1001 </td ></tr ><tr ><td >2 id: 1002 </td ></tr ></table >

last

last est à true lorsque la section est parcourue pour la dernière fois.

Exemple 7-26. Propriété last de section

{section name=client loop=$idClient}{if $smarty.section.client.first}

<table >{/if}

<tr ><td >{$smarty.section.client.index} id:{$idClient[client]} </td ></tr >

{if $smarty.section.client.last}</table >

{/if}{/section}

SORTIE:

<table ><tr ><td >0 id: 1000 </td ></tr ><tr ><td >1 id: 1001 </td ></tr >

46

Page 55: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

<tr ><td >2 id: 1002 </td ></tr ></table >

rownum

rownum, utilisé pour afficher la valeur courante de l’itération, commence par 1. C’estun alias de iteration, ils fonctionnent de façon identique.

Exemple 7-27. propriété rownum de section

{section name=client loop=$idClient}{$smarty.section.client.rownum} id: {$idClient[client]} <br >{/section}

SORTIE:

1 id: 1000 <br >2 id: 1001 <br >3 id: 1002 <br >

loop

loop est utilisé pour afficher la dernière valeur de index que cette section a utilisé.Peut être utilisé dans ou en dehors de la section.

Exemple 7-28. Propriété de section index

{section name=client loop=$idClient}{$smarty.section.client.index} id: {$idClient[client]} <br >{/section}

Il y eu {$smarty.section.client.loop} clients d’affichés.

SORTIE:

0 id: 1000 <br >1 id: 1001 <br >2 id: 1002 <br >

il y eu 3 clients d’affichés.

show

show est utilisé comme paramètre de section. show est une valeur booléenne, true oufalse. Si show est à "false", la section ne sera pas affichée. Si un sectionelse est présent,elle sera affiché.

Exemple 7-29. section, attribut show

{* $show_client_info a pu être passé par le script PHP,pour déterminer si oui ou non on souhaite afficher la section *}

{section name=client loop=$idClient show=$show_client_info}{$smarty.section.client.rownum} id: {$idClient[client]} <br >{/section}

{if $smarty.section.client.show}la section à été affichée.

47

Page 56: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

{else}la section n’a pas été affichée.{/if}

SORTIE:

1 id: 1000 <br >2 id: 1001 <br >3 id: 1002 <br >

la section à été affichée.

total

total est utilisé pour afficher le nombre d’itération que la section va exécuter. Peutêtre utilisé dans ou en dehors de la section.

Exemple 7-30. section, propriété total

{section name=client loop=$idClient step=2}{$smarty.section.client.index} id: {$idClient[client]} <br >{/section}

Il y eu {$smarty.section.client.total} clients affichés.

SORTIE:

0 id: 1000 <br >2 id: 1001 <br >4 id: 1002 <br >

Il y eu 3 clients affichés.

stripIl est fréquent que les designers web rencontrent des problèmes dus aux espaces etretours chariots, qui affectent le rendu HTML ("fonctionnalités" des navigateurs), lesobligeant à coller les balises les unes aux autres. Cette solution rend généralement lecode illisible et impossible à maintenir.

Tout contenu situé entre les balises {strip}{/strip} se verra allégé des espaces super-flus et des retours chariots en début ou en fin de ligne, avant qu’il ne soit affichés. Dela sorte, vous pouvez conserver vos templates lisibles, sans vous soucier des effetsindésirables que peuvent apporter les espaces superflus.

Note technique : {strip}{/strip} n’affecte en aucun cas le contenu des variables de tem-plate. Voir le modificateur strip pour un rendu identique pour les variables.

Exemple 7-31. balises strip

{* la suite sera affichée sur une seule ligne *}{strip}<table border=0 ><tr ><td ><A HREF="{$url}" >

48

Page 57: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

<font color="red" >Un test </font ></A >

</td ></tr >

</table >{/strip}

SORTIE:

<table border=0 ><tr ><td ><A HREF="http://mon.domaine.com" ><font color="red" >Un test </font ></A ></td ></tr ></table >

Notez que dans l’exemple ci-dessus, toutes les lignes commencent et se terminentpar des balises HTML. Sachez que si vous avez du texte en début ou en fin de lignedans des balises strip, ce dernier sera collé au suivant/précédent et risque de ne pasêtre affiché selon l’effet désiré.

49

Page 58: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 7. Fonctions natives

50

Page 59: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Smarty est livré avec plusieurs fonctions utilisateurs que vous pouvez appeler dansvos templates.

assign

Nom attribut Type Requis Defaut Description

var chaîne decaractère

Oui n/a Le nom de lavariableassignée

value chaîne decaractère

Oui n/a La valeurassignée

Assign est utilisé pour déclarer ou modifier des variables de template.

Exemple 8-1. assign

{assign var="name" value="Bob"}

La valeur de $name est {$name}.

SORTIE:

La valeur de $name est Bob.

counter

Nom attribut Type Requis Defaut Description

name chaîne decaractère

Non default Le nom ducompteur

start numérique Non 1 La valeurinitiale ducompteur

skip numérique Non 1 L’intervale ducompteur

direction chaîne decaractères

Non up la direction ducompteur(up/down)[compte /décompte]

print booléen Non true S’il faut affichercette valeur ounon

assign chaîne decaractères

Non n/a La variabledans laquelle lavaleur ducompteur seraassignée.

counter affiche un compteur. counter retient la valeur du compte à chaque itération.Vous pouvez adapter le nombre, l’intervale et la direction du compteur, ainsi que

51

Page 60: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

décider d’afficher ou non les valeurs. Vous pouvez lancer plusieurs compteurs si-multanément en leur donnant des noms uniques. Si vous ne donnez pas de nom à uncompteur, ’default’ sera utilisé.

Si vous donnez une valeur à l’attribut "assign", alors la sortie de la fonction countersera assignée à la variable de template donnée plutôt que d’être directement affichée.

Exemple 8-2. counter

{* initialisation du compteur *}{counter start=0 skip=2 print=false}

{counter} <br >{counter} <br >{counter} <br >{counter} <br >

SORTIE:

2<br >4<br >6<br >8<br >

cycle

Nom attribut Type Requis Defaut Description

name chaîne decaractères

Non default Le nom ducycle

values divers Oui N/A Les valeurs surlesquellesboucler, soitune listeséparée par desvirgules, (voirl’attributdelimiter), soitun tableau devaleurs.

print booléen Non true S’il faut afficherou non cettevaleur

advance booléen Non true Oui ou nonaller à laprochaînevaleur

delimiter chaîne decaractères

Non , Le délimiteur àutiliser dans laliste.

assign chaîne decaractères

Non n/a La variable detemplate danslaquelle lasortie seraassignée

cycle est utilisé pour boucler sur un ensemble de valeurs. Très pratique pour alterner

52

Page 61: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

entre deux ou plusieurs couleurs dans un tableau, ou plus généralement pour bouclersur les valeurs d’un tableau.

Vous pouvez définir plusieurs "cycle" dans votre template, en leur donnant des nomsuniques (attribut name).

Vous pouvez empêcher la valeur courante de s’afficher en définissant l’attribut printà false. Ce procédé peut être utile pour discrètement passer outre une valeur de laliste.

L’attribut advance est utilisé pour répéter une valeur. Lorsque définit à false, le pro-chain appel de cycle ramènera la même valeur.

Si vous définissez l’attribut spécial "assign", la sortie de la fonction cycle y sera assi-gnée plutôt que d’être directement affichée.

Exemple 8-3. cycle

{section name=rows loop=$data}<tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}" >

<td >{$data[rows]} </td ></tr >{/section}

SORTIE:

<tr bgcolor="#eeeeee" ><td >1</td >

</tr ><tr bgcolor="#d0d0d0" >

<td >2</td ></tr ><tr bgcolor="#eeeeee" >

<td >3</td ></tr >

debug

Nom attribut Type Requis Defaut Description

output chaîne decaractères

Non html Type de sortie,html oujavascript

{debug} amène la console de débogage sur la page. Fonctionne quelle que soit la va-leur du paramètre debug de Smarty. Comme ce dernier est appelé lors de l’exécution,il n’est capable d’afficher que les variables assignées au template, et non les templatesen cours d’utilisation. Toutefois, vous voyez toutes les variables disponibles pour letemplate courant.

eval

Nom attribut Type Requis Defaut Description

var mixed Oui n/a variable (ouchaîne decaractères) àévaluer

53

Page 62: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

assign chaîne decaractères

Non n/a Le nom de lavariable PHPdans laquelle lasortie seraassignée

eval évalue une variable comme si cette dernière était un template. Peut être utilepour embarquer des balises de templates ou des variables de template dans des va-riables ou des balises/variables dans des variables de fichiers de configuration.

Si vous définissez l’attribut "assign", la sortie sera assignée à la variable de templatedésignée plutôt que d’être affichée dans le template.

Note technique : Les variables évaluées sont traitées de la même façon que les tem-plates. Elles suivent les mêmes règles de traitement et de sécurité, comme si elles étaientréellement des templates.

Note technique : Les variables évaluées sont compilées à chaque invocation, et la ver-sion compilée n’est pas sauvegardée ! Toutefois, si le cache est activé, la sortie seraplacée en cache avec le reste du template.

Exemple 8-4. eval

setup.conf----------

emphstart = <b>emphend = </b >titre = Bienvenue sur la homepage de {$company} !ErrorVille = Vous devez spécifier un nom de {#emphstart#}ville{#emphend#}.ErrorDept = Vous devez spécifier un {#emphstart#}département{#emphend#}.

index.tpl---------

{config_load file="setup.conf"}

{eval var=$foo}{eval var=#titre#}{eval var=#ErrorVille#}{eval var=#ErrorDept# assign="state_error"}{$state_error}

SORTIE:

Ceci est le contenu de foo.Bienvenue sur la homepage de FictifLand.Vous devez spécifier un nom de <b>ville </b >.Vous devez spécifier un <b>département </b >.

54

Page 63: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

fetch

Nom attribut Type Requis Defaut Description

file chaîne decaractères

Oui n/a le fichier, sitehttp ou ftp àrécupérer

assign chaîne decaractères

Non n/a le nom de lavariable PHPdans laquelle lasortie seraassignée plutôtque d’êtredirectementaffichée.

fetch est utilisé pour récupérer des fichiers depuis le système de fichier local, depuisun serveur http ou ftp, et en afficher le contenu. Si le nom du fichier commence par"http://", la page internet sera récupérée, puis affichée. Si le nom du fichier com-mence par "ftp://", le fichier sera récupéré depuis le serveur ftp, et affiché. Pour lesfichiers du système local, le chemin doit être absolu ou relatif au chemin d’exécutiondu script PHP.

Vous pouvez spécifier l’attribut optionnel assign qui défini une variable de templatedans laquelle la sortie sera stockée plutôt qude d’être affichée (nouveau dans Smarty1.5.0).

Note technique : Ne supporte pas les redirections http. Assurez vous d’inclure les slashde fin sur votre page web si nécessaire.

Note technique : Si la sécurité est activée, vous ne pourez récupérer les fichiers dusystème local que s’ils sont situés dans l’un des répertoires sécurisé ($secure_dir).

Exemple 8-5. fetch

{* Inclus du javascript dans votre template *}{fetch file="/export/httpd/www.domain.com/docs/navbar.js"}

{* récupère les informations météo d’un autre site sur votre page *}{fetch file="http://www.myweather.com/68502/"}

{* récupère les titres depuis un fichier ftp *}{fetch file="ftp://user:[email protected]/path/to/currentheadlines.txt"}

{* assigne le contenu récupéré à une variable de template *}{fetch file="http://www.myweather.com/68502/" assign="weather"}{if $weather ne ""}<b>{$weather} </b >

{/if}

html_checkboxes

55

Page 64: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

name chaîne decaractères

Non checkbox Nom de la listede cases àcocher

values array Oui, à moinsque vousn’utilisiezl’attribut option

n/a Un tableau devaleurs pour lescases à cocher

output array Oui, à moinsque vousn’utilisiezl’attribut option

n/a Un tableau desortie pour lescases à cocher

checked chaîne decaractères

Non empty Les élémentscochés de laliste

options associativearray

Oui, à moinsque vousn’utilisiezvalues etoutput

n/a Un tableauassociatif devaleurs etsorties

separator chaîne decaractères

Non empty chaîne decaractère pourséparer chaquecase à cocher

html_checkboxes est une fonction utilisateur qui crée un groupe de cases à cocheravec les données fournies. Elle prend en compte la liste des éléments sélectionnéspar défaut. Les attributs requis sont values et output, à moins que vous n’utilisiezoptions à la place. La sortie générée est compatible XHTML.

Tous les paramètres qui ne sont pas listés ci-dessus sont affichés en tant que pairesnom/valeur dans chaque balise <input> crée.

Exemple 8-6. html_checkboxes

index.php:

require(’Smarty.php.class’);$smarty = new Smarty;$smarty- >assign(’id_client’, array(1000,1001,1002,1003));$smarty- >assign(’cust_names’, array(’Joe Schmoe’,’Jack Smith’,’JaneJohnson’,’Charlie Brown’));$smarty- >assign(’client_id’, 1001);$smarty- >display(’index.tpl’);

index.tpl:

{html_checkboxes values=$id_client checked=$client_id output=$nom_client separator=" <br / >"}

index.php:

require(’Smarty.php.class’);$smarty = new Smarty;$smarty- >assign(’cust_checkboxes’, array(

1001 = > ’Joe Schmoe’,

56

Page 65: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

1002 = > ’Jack Smith’,1003 = > ’Jane Johnson’,’Charlie Brown’));

$smarty- >assign(’client_id’, 1001);$smarty- >display(’index.tpl’);

index.tpl:

{html_checkboxes name="id" checkboxes=$cust_checkboxes checked=$client_id separator=" <br / >"}

SORTIE: (pour les deux exemples)

<input type="checkbox" name="id[]" value="1000" >Joe Schmoe<br / ><input type="checkbox" name="id[]" value="1001" checked="checked" ><br / ><input type="checkbox" name="id[]" value="1002" >Jane Johnson <br / ><input type="checkbox" name="id[]" value="1003" >Charlie Brown <br / >

html_image

Nom attribut Type Requis Defaut Description

file chaîne decaractères

Oui n/a nom/chemindes images

border chaîne decaractères

Non 0 Bordure del’image

height chaîne decaractères

Non Hauteur del’image actuelle

Hauteur del’image àafficher

width chaîne decaractères

Non Longueur del’image actuelle

Longueur del’image àafficher

basedir chaîne decaractères

non racine du serveurweb

répertoiredepuis lequelbaser le calculdes cheminsrelatifs

link chaîne decaractères

non n/a lien sur lequell’image pointe

html_image est une fonction utilisateur qui génère la balise HTML pour une image.La hauteur et la longueur de l’image sont calculés automatiquement depuis le fichierimage si aucune n’est spécifiée.

basedir est le répertoire de base depuis lequel seront calculés les chemins relatifs.Si non spécifié, la racine du serveur web est utilisé (variable d’environnement DO-CUMENT_ROOT). Si la sécurité est activée, l’image doit se situer dans un répertoiresécurisé.

link est la valeur href à laquelle lier l’image. Si link est défini, une balise <ahref="VALEURLINK"><a> est placée autour de l’image.

Note technique : html_image requiert un accès au disque dur pour lire l’image et calculerses dimensions. Si vous n’utilisez pas un cache, il est généralement préférable d’éviterd’utiliser html_image et de laisser les balises images statiques pour de meilleures perfor-mances.

57

Page 66: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Exemple 8-7. html_image

index.php:

require(’Smarty.php.class’);$smarty = new Smarty;$smarty- >display(’index.tpl’);

index.tpl:

{image file="pumpkin.jpg"}{image file="/path/from/docroot/pumpkin.jpg"}{image file="../path/relative/to/currdir/pumpkin.jpg"}

SORTIE: (possible)

<img src="pumpkin.jpg" border="0" width="44" height="68" ><img src="/path/under/docroot/pumpkin.jpg" border="0" width="44" height="68" ><img src="../path/relative/to/currdir/pumpkin.jpg" border="0" width="44" height="68" >

html_options

Nom attribut Type Requis Defaut Description

values array Oui, à moinsque vousn’utilisiezl’attributoptions

n/a un tableau devaleurs pour leslistesdéroulantes

output array Oui, à moinsque vousn’utilisiezl’attributoptions

n/a Un tableau delibellés pour laliste déroulante

selected chaîne de carac-tères/tableau

Non empty Les élémentssélectionnés

options Tableauassociatif

Oui, à moinsque vousn’utilisiezoption et values

n/a Un tableauassociatifvaleur / libellé

name chaîne decaractères

Non empty Nom du gouped’options

html_options est une fonction utilisateur qui crée un groupe d’options avec les don-nées fournies. Elle prend en charge les éléments sélectionnés par défaut. Les attributsrequis sont values et output, à moins que vous n’utilisiez options à la place.

Si la valeur donnée est un tableau, elle sera traitée comme un OPTGROUP html,et affichée. La récursivité est supportée avec OPTGROUP. La sortie est compatibleXHTML.

Si l’attribut optionnel name est donné, les balises <selectname="groupname"></select> entoureront la liste d’options.

Tous les paramètres qui ne sont pas dans la liste ci-dessus sont affichés en tant quepaires nom / valeur. Ils sont ignorés si le paramètre optionnel name n’est pas donné.

58

Page 67: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Exemple 8-8. html_options

index.php:

require(’Smarty.php.class’);$smarty = new Smarty;$smarty- >assign(’id_client’, array(1000,1001,1002,1003));$smarty- >assign(’nom_client’, array(’Joe Schmoe’,’Jack Smith’,’JaneJohnson’,’Charlie Brown’));$smarty- >assign(’client_id’, 1001);$smarty- >display(’index.tpl’);

index.tpl:

<select name=client_id >{html_options values=$id_client selected=$client_id output=$nom_client}

</select >

index.php:

require(’Smarty.php.class’);$smarty = new Smarty;$smarty- >assign(’cust_options’, array(

1001 = > ’Joe Schmoe’,1002 = > ’Jack Smith’,1003 = > ’Jane Johnson’,1004 = > ’Charlie Brown’));

$smarty- >assign(’client_id’, 1001);$smarty- >display(’index.tpl’);

index.tpl:

<select name=client_id >{html_options options=$cust_options selected=$client_id}

</select >

SORTIE: (valable pour les deux exemples)

<select name=client_id ><option value="1000" >Joe Schmoe</option ><option value="1001" selected="selected" >Jack Smith </option ><option value="1002" >Jane Johnson </option ><option value="1003" >Charlie Brown </option >

</select >

html_radios

Nom attribut Type Requis Defaut Description

name chaîne decaractères

Non radio nom de la listeboutons radio

values tableau Oui, à moinsque vousn’utilisiezl’attributoptions

n/a Le tableau desvaleurs desboutons radio

59

Page 68: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

output tableau Oui, à moinsque vousn’utilisiezl’attributoptions

n/a Un tableau delibellés pour lesboutons radio

checked chaîne decaractères

Non empty Les boutonsradiossélectionnés

options tableauassociatif

Oui, à moinsque vousn’utilisiezvalues etoutputs

n/a un tableauassociatifvaleurs /libellés

separator chaîne decaractères

Non empty chaîne deséparation àplacer entre lesboutons radio

html_radio est une fonction utilisateur qui crée des boutons radio html à partir desdonnées fournies. Elle prend en charge les éléments sélectionnés par défaut. Les at-tributs requis sont values et output, à moins que vous n’utilisiez options à la place.La sortie générée est compatible XHTML.

Tous les paramètres qui ne sont pas dans la liste ci dessus sont affichés en tant quepaires nom / valeur dans chaque balise <input> créée.

Exemple 8-9. html_radios

index.php:

require(’Smarty.php.class’);$smarty = new Smarty;$smarty- >assign(’id_client’, array(1000,1001,1002,1003));$smarty- >assign(’nom_client’, array(’Joe Schmoe’,’Jack Smith’,’JaneJohnson’,’Charlie Brown’));$smarty- >assign(’client_id’, 1001);$smarty- >display(’index.tpl’);

index.tpl:

{html_radios values=$id_client checked=$client_id output=$nom_client separator=" <br / >"}

index.php:

require(’Smarty.php.class’);$smarty = new Smarty;$smarty- >assign(’cust_radios’, array(

1001 = > ’Joe Schmoe’,1002 = > ’Jack Smith’,1003 = > ’Jane Johnson’,1004 = > ’Charlie Brown’));

$smarty- >assign(’client_id’, 1001);$smarty- >display(’index.tpl’);

index.tpl:

{html_radios name="id" radios=$cust_radios checked=$client_id separator=" <br / >"}

60

Page 69: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

SORTIE: (both examples)

<input type="radio" name="id[]" value="1000" >Joe Schmoe<br / ><input type="radio" name="id[]" value="1001" checked="checked" ><br / ><input type="radio" name="id[]" value="1002" >Jane Johnson <br / ><input type="radio" name="id[]" value="1003" >Charlie Brown <br / >

html_select_date

Nom attribut Type Requis Defaut Description

prefix chaîne decaractères

Non Date_ Avec quoipréfixer le nomde variable

timetimestamp/YYYY-MM-DD

Non la date couranteau format unixYYYY-MM-DDformat

la date / heureà utiliser

start_year chaîne decaractères

Non current year La premièreannée dans laliste déroulante,soit le numérode l’année, soitun nombrerelatif à l’annéecourante (+/-N).

end_year chaîne decaractères

Non même choseque start_year

La dernièreannée dans laliste déroulante,soit le numérode l’année, soitun nombrerelatif à l’annéecourante (+/-N).

display_days boolean Non true Si l’on souhaiteafficher lesjours ou pas.

display_months boolean Non true Si l’on souhaiteafficher les moisou pas.

display_years boolean Non true Si l’on souhaiteafficher lesannées ou pas.

month_format chaîne decaractères

Non %B le format dumois (strftime)

day_format chaîne decaractères

Non %02d Le format dujour (sprintf)

day_value_formatchaîne de

caractèresNon %d le format de la

valeur du jour(sprintf)

61

Page 70: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

year_as_text boolean Non false S’il faut afficherl’année auformat texte

reverse_years boolean Non false Affiche lesannées dansl’ordre inverse

field_array chaîne decaractères

Non null Si un nom estdonné, la listedéroulante seraaffichée de tellefaçon que lesrésultats serontretournés àPHP sous laformenom[Day](jour),nom[Year](année),nom[Month](Mois).

day_size chaîne decaractères

Non null Ajoute unattribut size à laliste déroulantedes jours.

month_size chaîne decaractères

Non null Ajoute unattribut size à laliste déroulantedes mois.

year_size chaîne decaractères

Non null Ajoute unattribut size à laliste déroulantedes années.

all_extra chaîne decaractères

Non null Ajoute desattributs sup-plémentaires àtoutes lesbalisesselect/input.

day_extra chaîne decaractères

Non null Ajoute desattributs sup-plémentairesaux balisesselect/input dujour.

month_extra chaîne decaractères

Non null Ajoute desattributs sup-plémentairesaux balisesselect/input dumois.

62

Page 71: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

year_extra chaîne decaractères

Non null Ajoute desattributs sup-plémentairesaux balisesselect/input del’année.

field_order chaîne decaractères

Non MDY L’ordre danslequel afficherles listesdéroulantes.

field_separator chaîne decaractères

Non \n la chaîne decaractèresaffichée entreles différentschamps.

month_value_formatchaîne de

caractèresNon %m Le format

strftime de lavaleur desmois, pardéfaut %mpour lesnuméros.

html_select_date est une fonction utilisateur qui crée des listes déroulantes pour sai-sir la date. Elle peut afficher n’importe quel jour, mois et année.

Exemple 8-10. html_select_date

{html_select_date}

SORTIE:

<select name="Date_Month" ><option value="1" >January </option ><option value="2" >February </option ><option value="3" >March </option ><option value="4" >April </option ><option value="5" >May</option ><option value="6" >June </option ><option value="7" >July </option ><option value="8" >August </option ><option value="9" >September </option ><option value="10" >October </option ><option value="11" >November </option ><option value="12" selected >December </option ></select ><select name="Date_Day" ><option value="1" >01</option ><option value="2" >02</option ><option value="3" >03</option ><option value="4" >04</option ><option value="5" >05</option ><option value="6" >06</option ><option value="7" >07</option ><option value="8" >08</option ><option value="9" >09</option ><option value="10" >10</option ><option value="11" >11</option ><option value="12" >12</option >

63

Page 72: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

<option value="13" selected >13</option ><option value="14" >14</option ><option value="15" >15</option ><option value="16" >16</option ><option value="17" >17</option ><option value="18" >18</option ><option value="19" >19</option ><option value="20" >20</option ><option value="21" >21</option ><option value="22" >22</option ><option value="23" >23</option ><option value="24" >24</option ><option value="25" >25</option ><option value="26" >26</option ><option value="27" >27</option ><option value="28" >28</option ><option value="29" >29</option ><option value="30" >30</option ><option value="31" >31</option ></select ><select name="Date_Year" ><option value="2001" selected >2001 </option ></select >

Exemple 8-11. html_select_date

{* le démarage et la fin de l’année peuvent être relatif à l’année courante *}{html_select_date prefix="StartDate" time=$time start_year="-5" end_year="+1" display_days=false}

SORTIE: (current year is 2000)

<select name="StartDateMonth" ><option value="1" >January </option ><option value="2" >February </option ><option value="3" >March </option ><option value="4" >April </option ><option value="5" >May</option ><option value="6" >June </option ><option value="7" >July </option ><option value="8" >August </option ><option value="9" >September </option ><option value="10" >October </option ><option value="11" >November </option ><option value="12" selected >December </option ></select ><select name="StartDateYear" ><option value="1999" >1995 </option ><option value="1999" >1996 </option ><option value="1999" >1997 </option ><option value="1999" >1998 </option ><option value="1999" >1999 </option ><option value="2000" selected >2000 </option ><option value="2001" >2001 </option ></select >

64

Page 73: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

html_select_time

Nom attribut Type Requis Defaut Description

prefix chaîne decaractères

Non Time_ Par quoipréfixer lavariable.

time timestamp Non current time Quel jour /heure utiliser.

display_hours boolean Non true S’il faut afficherl’heure.

dis-play_minutes

boolean Non true S’il faut afficherles minutes.

dis-play_seconds

boolean Non true S’il faut afficherles secondes.

dis-play_meridian

boolean Non true S’il faut afficherle méridian(am/pm)

use_24_hours boolean Non true S’il faut utiliserl’horloge 24heure.

minute_interval integer Non 1 Intervalle desminutes dans laliste déroulante

second_interval integer Non 1 Intervalle dessecondes dansla listedéroulante

field_array chaîne decaractères

Non n/a Nom dutableau danslequel lesvaleures serontstockées.

all_extra chaîne decaractères

Non null Ajoute desattributs sup-plémentairesaux balisesselect / input.

hour_extra chaîne decaractères

Non null Ajoute desattributs sup-plémentairesaux balisesselect / inputde l’heure.

65

Page 74: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

minute_extra chaîne decaractères

Non null Ajoute desattributs sup-plémentairesaux balisesselect / inputdes minutes.

second_extra chaîne decaractères

Non null Ajoute desattributs sup-plémentairesaux balisesselect / inputdes secondes.

meridian_extra chaîne decaractères

Non null Ajoute desattributs sup-plémentairesaux balisesselect / inputdu méridian.

html_select_time est une fonction utilisateur qui crée des listes déroulantes pour sai-sir une heure. Elle prends en charge l’heure, les minutes, les secondes et le méridian.

Exemple 8-12. html_select_time

{html_select_time use_24_hours=true}

SORTIE:

<select name="Time_Hour" ><option value="00" >00</option ><option value="01" >01</option ><option value="02" >02</option ><option value="03" >03</option ><option value="04" >04</option ><option value="05" >05</option ><option value="06" >06</option ><option value="07" >07</option ><option value="08" >08</option ><option value="09" selected >09</option ><option value="10" >10</option ><option value="11" >11</option ><option value="12" >12</option ><option value="13" >13</option ><option value="14" >14</option ><option value="15" >15</option ><option value="16" >16</option ><option value="17" >17</option ><option value="18" >18</option ><option value="19" >19</option ><option value="20" >20</option ><option value="21" >21</option ><option value="22" >22</option ><option value="23" >23</option ></select ><select name="Time_Minute" ><option value="00" >00</option ><option value="01" >01</option ><option value="02" >02</option ><option value="03" >03</option ><option value="04" >04</option >

66

Page 75: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

<option value="05" >05</option ><option value="06" >06</option ><option value="07" >07</option ><option value="08" >08</option ><option value="09" >09</option ><option value="10" >10</option ><option value="11" >11</option ><option value="12" >12</option ><option value="13" >13</option ><option value="14" >14</option ><option value="15" >15</option ><option value="16" >16</option ><option value="17" >17</option ><option value="18" >18</option ><option value="19" >19</option ><option value="20" selected >20</option ><option value="21" >21</option ><option value="22" >22</option ><option value="23" >23</option ><option value="24" >24</option ><option value="25" >25</option ><option value="26" >26</option ><option value="27" >27</option ><option value="28" >28</option ><option value="29" >29</option ><option value="30" >30</option ><option value="31" >31</option ><option value="32" >32</option ><option value="33" >33</option ><option value="34" >34</option ><option value="35" >35</option ><option value="36" >36</option ><option value="37" >37</option ><option value="38" >38</option ><option value="39" >39</option ><option value="40" >40</option ><option value="41" >41</option ><option value="42" >42</option ><option value="43" >43</option ><option value="44" >44</option ><option value="45" >45</option ><option value="46" >46</option ><option value="47" >47</option ><option value="48" >48</option ><option value="49" >49</option ><option value="50" >50</option ><option value="51" >51</option ><option value="52" >52</option ><option value="53" >53</option ><option value="54" >54</option ><option value="55" >55</option ><option value="56" >56</option ><option value="57" >57</option ><option value="58" >58</option ><option value="59" >59</option ></select ><select name="Time_Second" ><option value="00" >00</option ><option value="01" >01</option ><option value="02" >02</option ><option value="03" >03</option ><option value="04" >04</option ><option value="05" >05</option ><option value="06" >06</option ><option value="07" >07</option ><option value="08" >08</option >

67

Page 76: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

<option value="09" >09</option ><option value="10" >10</option ><option value="11" >11</option ><option value="12" >12</option ><option value="13" >13</option ><option value="14" >14</option ><option value="15" >15</option ><option value="16" >16</option ><option value="17" >17</option ><option value="18" >18</option ><option value="19" >19</option ><option value="20" >20</option ><option value="21" >21</option ><option value="22" >22</option ><option value="23" selected >23</option ><option value="24" >24</option ><option value="25" >25</option ><option value="26" >26</option ><option value="27" >27</option ><option value="28" >28</option ><option value="29" >29</option ><option value="30" >30</option ><option value="31" >31</option ><option value="32" >32</option ><option value="33" >33</option ><option value="34" >34</option ><option value="35" >35</option ><option value="36" >36</option ><option value="37" >37</option ><option value="38" >38</option ><option value="39" >39</option ><option value="40" >40</option ><option value="41" >41</option ><option value="42" >42</option ><option value="43" >43</option ><option value="44" >44</option ><option value="45" >45</option ><option value="46" >46</option ><option value="47" >47</option ><option value="48" >48</option ><option value="49" >49</option ><option value="50" >50</option ><option value="51" >51</option ><option value="52" >52</option ><option value="53" >53</option ><option value="54" >54</option ><option value="55" >55</option ><option value="56" >56</option ><option value="57" >57</option ><option value="58" >58</option ><option value="59" >59</option ></select ><select name="Time_Meridian" ><option value="am" selected >AM</option ><option value="pm" >PM</option ></select >

68

Page 77: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

html_table

Nom attribut Type Requis Defaut Description

loop array Oui n/a Tableau dedonnées àparcourir

cols integer Non 3 Nombre decolonnes dutableau

table_attr chaîne decaractères

Non border="1" attributs pourla balise table

tr_attr chaîne decaractères

Non empty attributs pourles balises tr (lestableaux sontparcourus)

td_attr chaîne decaractères

Non empty attributs pourles balises td(les tableauxsont parcourus)

trailpad chaîne decaractères

Non &nbsp; valeur aveclaquelle remplirles cellulesrestantes de ladernière ligne(si il y en a)

html_table est une fonction utilisateur qui transforme un tableau de données dansun tabeau HTML. L’attribut cols détermine le nombre de colonne du tableau. Lesattributs table_attr, tr_attr et td_attr déterminent les attributs donnés aux balises table,tr et td. Si tr_attr ou td_attr sont des tableaux, ils seront parcourus. trailpad est la valeuravec laquelle remplir les cellules restantes de la dernière ligne, s’il y en a une.

Exemple 8-13. html_table

index.php:

require(’Smarty.php.class’);$smarty = new Smarty;$smarty- >assign(’data’,array(1,2,3,4,5,6,7,8,9));$smarty- >assign(’tr’,array(’bgcolor="#eeeeee"’,’bgcolor="#dddddd"’));$smarty- >display(’index.tpl’);

index.tpl:

{html_table loop=$data}{html_table loop=$data cols=4 table_attrs=’border="0"’}{html_table loop=$data cols=4 tr_attrs=$tr}

SORTIE:

<table border="1" ><tr ><td >1</td ><td >2</td ><td >3</td ></tr ><tr ><td >4</td ><td >5</td ><td >6</td ></tr ><tr ><td >7</td ><td >8</td ><td >9</td ></tr ></table >

69

Page 78: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

<table border="0" ><tr ><td >1</td ><td >2</td ><td >3</td ><td >4</td ></tr ><tr ><td >5</td ><td >6</td ><td >7</td ><td >8</td ></tr ><tr ><td >9</td ><td >&nbsp; </td ><td >&nbsp; </td ><td >&nbsp; </td ></tr ></table ><table border="1" ><tr bgcolor="#eeeeee" ><td >1</td ><td >2</td ><td >3</td ><td >4</td ></tr ><tr bgcolor="#dddddd" ><td >5</td ><td >6</td ><td >7</td ><td >8</td ></tr ><tr bgcolor="#eeeeee" ><td >9</td ><td >&nbsp; </td ><td >&nbsp; </td ><td >&nbsp; </td ></tr ></table >

math

Nom attribut Type Requis Defaut Description

equation chaîne decaractères

Oui n/a L’opération àéxécuter

format chaîne decaractères

Non n/a Le format durésultat(sprintf)

var numeric Oui n/a Les variables del’opération

assign chaîne decaractères

Non n/a Variable detemplate danslaquelle lasortie seraassignée

[var ...] numeric Oui n/a Valeurs desvariables del’opération

math autorise les designers de templates à effectuer des opérations dans le template.Toute valeur numérique peut être utilisée dans une opération, et le résultat sera af-fiché à la place des balises "equation". Les variables utilisées dans l’opération sontpassées en tant que paramètre, et peuvent être des variables de templates ou des va-leurs statiques. +, -, /, *, abs, ceil, cos, exp, floor, log, log10, max, min, pi, pow, rand,round, sin, sqrt, srans et tan sont tous des opérateurs valides. Voir la documentationPHP pour plus d’informations sur ces fonctions mathématiques.

Si vous spécifiez l’attribut assign, la sortie sera assignée à la variable donnée plutôtque d’être directement affichée.

Note technique : math est une fonction coûteuse en terme de performances, du faitqu’elle utilise la fonction PHP eval (). Effectuer les calculs dans votre code PHP est beau-coup plus efficient, donc, chaque fois que possible, effectuez vos calculs directementdans PHP et assignez le résultat au template. Evitez coût que coût les appels répétitifs àla fonction math, comme on pourait le faire une une boucle section.

Exemple 8-14. math

{* $height=4, $width=5 *}

{math equation="x + y" x=$height y=$width}

SORTIE:

70

Page 79: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

9

{* $row_height = 10, $row_width = 20, #col_div# = 2, assigned in tem-plate *}

{math equation="height * width / division"height=$row_heightwidth=$row_widthdivision=#col_div#}

SORTIE:

100

{* vous pouvez utiliser des parenthèses *}

{math equation="(( x + y ) / z )" x=2 y=10 z=2}

SORTIE:

6

{* vous pouvez définir un format sprintf pour l’affichage *}

{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}

SORTIE:

9.44

mailto

Nom attribut Type Requis Defaut Description

address chaîne decaractères

Oui n/a l’adresse email

text chaîne decaractères

Non n/a le texte àafficher, pardéfaut l’adresseemail

encode chaîne decaractères

Non none Commentencoderl’adresse email.none, hex etjavascript sontdes valeurscorrectes.

cc chaîne decaractères

Non n/a Les adressesemail en copie(Cc). Séparezles entrées parune virgule.

71

Page 80: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

bcc chaîne decaractères

Non n/a Les adressesemail en copiecachées (Bcc).Séparez lesentrées par unevirgule.

subject chaîne decaractères

Non n/a Sujet de l’email.

newsgroups chaîne decaractères

Non n/a newsgroup ouposter lemessage.Séparez lesentrées par unevirgule.

followupto chaîne decaractères

Non n/a Adresses outransmettre lemessage.Séparez lesentrées par unevirgule.

extra chaîne decaractères

Non n/a Touteinformationque voussouhaitezpasser au lien,comme parexemple uneclasse css.

mailto crée un lien mailto automatiquement encodé (optionnel). L’encodage rend latâche de récupération des e-mails sur votre site plus difficiles aux "web spiders".

Note technique : javascript n’est certainement pas la forme d’encodage la plus robuste.Vous pouvez également utiliser un encodage hexadécimal.

Exemple 8-15. mailto

{mailto address="[email protected]"}{mailto address="[email protected]" text="send me some mail"}{mailto address="[email protected]" encode="javascript"}{mailto address="[email protected]" encode="hex"}{mailto address="[email protected]" subject="Hello to you!"}{mailto address="[email protected]" cc="[email protected],[email protected]"}{mailto address="[email protected]" extra=’class="email"’}

SORTIE:

<a href="mailto:[email protected]" >[email protected] </a ><a href="mailto:[email protected]" >send me some mail </a ><SCRIPT language="javascript" >eval(unescape(’%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%20%3e%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%3c%2f%61%3e%27%29%3b’)) </SCRIPT ><a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d" >&#x6d;&#x65;&#x40;&#x64;&#x6f;&#x6d;&#x61;&#x69;&#x6e;&#x2e;&#x63;&#x6f;&#x6d; </a ><a href="mailto:[email protected]?subject=Hello%20to%20you%21" >[email protected] </a >

72

Page 81: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

<a href="mailto:[email protected][email protected]%[email protected]" >[email protected] </a ><a href="mailto:[email protected]" class="email" >[email protected] </a >

popup_initpopup est une intégration de overLib, une librairie capable de réaliser des fenêtressurgissantes. (nous parlerons de "popup"). Ce type de fenêtre est utilisé pour ap-porter des informations contextuelles, comme des infobulles d’aides ou astuces. po-pup_init doit être appelé une fois, en début de page si vous comptez utiliser la fonc-tion popup. overLib à été écrit par Erik Bosrup. Le site d’overlib est situé à l’adressehttp://www.bosrup.com/web/overlib/.

Comme dans Smarty 2.1.2, overLib n’est PAS fournie dans la distribution. Téléchar-gez overLib, déposez overlib.js dans votre arborescence web et indiquez le cheminrelatif à ce fichier dans l’attribut src de popup_init.

Exemple 8-16. popup_init

{* popup_init doit être appelé une fois en début de page. *}{popup_init src="/javascripts/overlib.js"}

popup

Nom attribut Type Requis Defaut Description

text chaîne decaractères

Oui n/a le texte/codehtml à afficherdans la popup

trigger chaîne decaractères

Non onMouseOver L’évènementutilisé pourrendre la popupactive,onMouseOverou onClick.

sticky boolean Non false Rends la popupactive jusqu’ace qu’elle soitexplicitementfermée.

caption chaîne decaractères

Non n/a Défini le libellédu titre

fgcolor chaîne decaractères

Non n/a couleur internede la popup

bgcolor chaîne decaractères

Non n/a couleur de labordure de lapopup

textcolor chaîne decaractères

Non n/a couleur dutexte àl’intérieur de lapopup

capcolor chaîne decaractères

Non n/a couleur dulibellé de lapopup

73

Page 82: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

closecolor chaîne decaractères

Non n/a couleur dutexte defermeture

textfont chaîne decaractères

Non n/a la police àutiliser dans letexte principal

captionfont chaîne decaractères

Non n/a la police àutiliser dans lelibellé

closefont chaîne decaractères

Non n/a la police pour letexte defermeture

textsize chaîne decaractères

Non n/a taille de lapolice texteprinicpal

captionsize chaîne decaractères

Non n/a taille de lapolice du libellé

closesize chaîne decaractères

Non n/a taille de lapolice dubouton "fermer"

width integer Non n/a Longeur de lapopup

height integer Non n/a Hauteur de lapopup

left boolean Non false la popup va àgauche de lasouris

right boolean Non false la popup va àdroite de lasouris

center boolean Non false la popup estcentrée parrapport à laposition de lasouris

above boolean Non false la popup est audessus de lasouris. NOTE:possibleuniquement sila hauteur estdéfinie

below boolean Non false la popupapparait endessous de lasouris

74

Page 83: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

border integer Non n/a rends labordure de lapopup plusépaisse ou plusfine

offsetx integer Non n/a A quelledistance ducurseur lapopupapparaitra ,horizontale-ment.

offsety integer Non n/a A quelledistance ducurseur lapopupapparaitra ,verticalement.

fgbackground url to image Non n/a Une image àutiliser à laplace de lacouleur defonds dans lapopup

bgbackground url to image Non n/a Image à utiliserà la place de labordure de lapopup. NOTE:vous veillerez àdéfinir bgcolorà "" ou lacouleurapparaitra demême. NOTE:Lorsque vousavez un lien defermeture,Netscapeeffectuera unnouveau rendudes cellules dutableau,affichant malles éléments

closetext chaîne decaractères

Non n/a définit le textede fermeturepar autre choseque "Close"

noclose boolean Non n/a N’affiche pas lebouton "Close"pour lesfenêtres"collantes".

75

Page 84: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

status chaîne decaractères

Non n/a défini le textede la barre destatut dunavigateur

autostatus boolean Non n/a Défini le textede la barre destatut aucontenu de lapopup. NOTE:Ecrase l’attributstatus.

autostatuscap chaîne decaractères

Non n/a Défini le textede la barre destatut au libelléde la popup.NOTE: Ecrasel’attribut status.

inarray integer Non n/a indique àoverLib de lirele texte à cetindex dans letableau ol_text,situé dansoverlib.js. Ceparamètre peutêtre utilisé à laplace de text.

caparray integer Non n/a indique àoverlib de lire lelibellé depuis letableau ol_caps

capicon url Non n/a affiche l’imagespécifiée avantle libellé de lapopup

snapx integer Non n/a Aligne lapopup sur unegrillehorizontale

snapy integer Non n/a Aligne lapopup sur unegrille verticale

fixx integer Non n/a vérrouille lapopup à unepositionhorizontale.Note: remplaceles autresparamètres depositionhorizontale

76

Page 85: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

fixy integer Non n/a vérouille lapopup à unepositionverticale Note:remplace lesautresparamètres depositionverticale

background url Non n/a défini l’image àutiliser plutôtque le tableaude fond

padx integer,integer Non n/a écarte l’imagede fond dureste deséléments avecun espacehorizontal,pour lepositionnementdu texte. Note:c’est un attributà deuxparamètres.

pady integer,integer Non n/a écarte l’imagede fond dureste deséléments avecun espacevertical, pour lepositionnementdu texte. Note:c’est un attributà deuxparamètres.

fullhtml boolean Non n/a vous autorise àplacer du codehtml en tantque contenu dela popup. Lecode html estattendu dansl’attribut text.

frame chaîne decaractères

Non n/a contrôle lapopup dans uncadre différent.Voir ladocumentationd’overlib pourplus de détailssur cettefonction.

77

Page 86: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

timeout chaîne decaractères

Non n/a Appelle lafonctionjavascriptspécifiée etprends savaleur de retourcomme textedevant êtreaffiché dans lapopup.

delay integer Non n/a la popup secomportecomme uneinfobulle. Elledisparaitra aubout d’uncertain délai, enmillisecondes.

hauto boolean Non n/a Détermine au-tomatiquementsi la popup doitêtre à gaucheou à droite de lasouris

vauto boolean Non n/a Détermine au-tomatiquementsi la popup doitêtre au-dessusou au-dessousde la souris

popup est utilisé pour créer une fenêtre popup javascript.

Exemple 8-17. popup

{* popup_init doit être appelé en haut de votre page *}{popup_init src="/javascripts/overlib.js"}

{* création d’un lien avec une popup qui apparait sur l’évènement on-MouseOver *}<A href="mypage.html" {popup text="Ce lien vous amène sur ma page!"} >mypage</A >

{* vous pouvez utiliser du html, des liens, etc dans vos popup *}<A href="mypage.html" {popup sticky=true caption="mypage contents"text=" <UL><LI >links <LI >pages <LI >images </UL >" snapx=10 snapy=10} >mypage</A >

SORTIE:

(allez sur le site officiel de Smarty pour des exemples.)

textformat

Nom attribut Type Requis Defaut Description

style chaîne decaractères

Non n/a style prédéfini

78

Page 87: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

Nom attribut Type Requis Defaut Description

indent number Non 0 Taille del’indentationpour chaqueligne

indent_first number Non 0 Taille del’indentation dela premièreligne

indent_char chaîne decaractères

Non (single space) Le caractère (oula chaîne) àutiliser pourindenter

wrap number Non 80 A combien decaractères doiton ajusterchaque ligne

wrap_char chaîne decaractères

Non \n Le caractère (ouchaîne decaractères) aveclequel terminerles lignes

wrap_cut boolean Non false Si true, wrapréduira leslignes aucaractère exactau lieu d’ajusterà la fin d’unmot

assign chaîne decaractères

Non n/a Le nom de lavariable PHPdans laquelle lasortie seraassignée

textformat est une fonction de bloc utilisée pour formater du texte. Elle nettoie lachaîne de ses espaces et caractères spéciaux, puis formate les paragraphes en ajustantces derniers à une certaine limite, puis en indentant les lignes.

Vous pouvez soit utiliser un style prédéfini, soit définir explicitement chaque attribut.Actuellement, seul le style prédéfini "email" est disponible.

Exemple 8-18. textformat

{textformat wrap=40}

This is foo.This is foo.This is foo.This is foo.This is foo.This is foo.

This is bar.

bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.

79

Page 88: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.

{/textformat}

SORTIE:

This is foo. This is foo. This is foo.This is foo. This is foo. This is foo.

This is bar.

bar foo bar foo foo. bar foo bar foofoo. bar foo bar foo foo. bar foo barfoo foo. bar foo bar foo foo. bar foobar foo foo. bar foo bar foo foo.

{textformat wrap=40 indent=4}

This is foo.This is foo.This is foo.This is foo.This is foo.This is foo.

This is bar.

bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.

{/textformat}

SORTIE:

This is foo. This is foo. This isfoo. This is foo. This is foo. Thisis foo.

This is bar.

bar foo bar foo foo. bar foo bar foofoo. bar foo bar foo foo. bar foobar foo foo. bar foo bar foo foo.bar foo bar foo foo. bar foo barfoo foo.

{textformat wrap=40 indent=4 indent_first=4}

This is foo.This is foo.This is foo.This is foo.This is foo.This is foo.

This is bar.

80

Page 89: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.

{/textformat}

SORTIE:

This is foo. This is foo. Thisis foo. This is foo. This is foo.This is foo.

This is bar.

bar foo bar foo foo. bar foo barfoo foo. bar foo bar foo foo. barfoo bar foo foo. bar foo bar foofoo. bar foo bar foo foo. bar foobar foo foo.

{textformat style="email"}

This is foo.This is foo.This is foo.This is foo.This is foo.This is foo.

This is bar.

bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.bar foo bar foo foo.

{/textformat}

SORTIE:

This is foo. This is foo. This is foo. This is foo. This is foo. This isfoo.

This is bar.

bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foobar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foofoo.

81

Page 90: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 8. Fonctions utilisateur

82

Page 91: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 9. Fichiers de configuration

Les fichiers de configuration sont un moyen interressant pour gérer des variablesdepuis un seul et même fichier. L’exemple le plus courant étant le schéma de couleursdu template. Normalement, pour changer le schéma de couleur d’une application,vous devriez aller dans chaque template et changer la couleur des éléments (ou lesclasses css). Avec un fichier de configuration, il vous est possible de conserver lacouleur dans un seul endroit, puis de la mettre à jour une seule fois.

Exemple 9-1. Exemple de fichier de configuration

# variables globalestitrePage = "Menu principal"bodyBgColor = #000000tableBgColor = #000000rowBgColor = #00ff00

[client]titrePage = "Infos client"

[Login]titrePage = "Login"focus = "utilisateur"Intro = """Une valeur qui tient sur

plusieur lignes. Vous devez la placerentre trois guillemets."""

# hidden section[.Database]host=mon.domaine.comdb=ADDRESSBOOKuser=php-userpass=foobar

Les valeurs des variables de fichiers de configuration peuvent être entre guillemets,sans que cela soit nécessaire. Si vous vouler utiliser des valeurs sur plusieurs lignes,vous devrez les entourer de triples guillemets ("""). Vous pouvez insérer des com-mentaires dans les fichiers de configuration en utilisant une syntaxe quelquonque,non valide. Nous recommandons l’utilisation de # (dièse) en début de ligne.

Cet exemple de fichier de configuration contient deux sections. Les noms des sectionssont entourés de crochets []. Les noms de section peuvent être des chaînes, ne conte-nant aucun des symboles [ et ] . Dans notre exemple, les 4 variables du début sontdes variables dites globales, qui ne sont pas contenue dans une section. Ces variablessont toujours chargées depuis le fichier de configuration. Si une section est chargée,alors toutes les variables de cette section ainsi que les variables globales sont char-gées. Si une variable existe à la fois en tant que globale et à la fois en tant que variablede section, la variable de section est prioritaire. Si vous appelez deux variables dansune même section de la même façon, la dernière déclarée prime.

Les fichiers de configuration sont chargés dans le template grâce à la fonctionconfig_load.

Vous pouvez masquer des variables ou des sections entières en préfixant le nom dela variable ou le nom de la section avec une virgule. Ce procédé est utile si votre ap-plication récupère ses données depuis plusieurs fichiers de configuration et récupèredes données sensibles dont vos templates n’ont pas besoin. Si des tiers éditent destemplates, vous êtes sûr que ces derniers n’accèderont pas à ces données de configu-ration en les chargeant depuis le template.

83

Page 92: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 9. Fichiers de configuration

84

Page 93: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 10. Console de débogage

Il existe une console de débogage dans Smarty. La console vous indique toutes les va-riables incluses, assignées et chargées depuis un fichier de configuration pour le tem-plate courant. Un template appelé "debug.tpl" est inclus dans la distribution de Smar-ty. Si besoin, vous pouvez définir $debug_tpl de façon à ce que ce dernier contienne lechemin du template à utiliser(dans SMARTY_DIR par defaut). Lorsque vous chargezla page, une console javascript est censée surgir et vous donner les noms de toutesles variables inclues et assignées dans votre page courante. Pour voir toutes les va-riables d’un template particulier, voir la fonction {debug}. Pour désactiver la consolede débogage, définissez $debugging à false. Vous pouvez également temporairementactiver le débogage en indiquant SMARTY_DEBUG dans l’url si tant est que l’option$debugging_ctrl soit activée.

Note technique : La console de débogage ne fonctionne pas si vous utilisez l’API fetch(), mais seulement lorsque vous utilisez display (). C’est en effet un jeu d’instructionsjavascripts à la fin du template qui déclenchent l’ouverture de la fenêtre. Si vous n’aimezpas javascript, vous pouvez modifier debug.tpl pour formater les données de la façon quivous conviendra le mieux. Les données de débogage ne sont pas mises en cache et lesinformations de debug.tpl ne sont pas incluses dans la sortie de la console de débogage.

Note : Le temps de chargement des templates et des fichiers de configuration sont in-diqués en secondes.

85

Page 94: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 10. Console de débogage

86

Page 95: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 11. Constantes

SMARTY_DIRIl doit s’agir du chemin complet du répertoire où se trouvent les fichiers classes deSmarty. S’il n’est pas défini, Smarty essaiera alors d’en déterminer automatiquementla valeur. S’il est défini, le chemin doit se terminer par un slash.

Exemple 11-1. SMARTY_DIR

// définit le chemin du répertoire de Smartydefine("SMARTY_DIR","/usr/local/lib/php/Smarty/");

require_once(SMARTY_DIR."Smarty.class.php");

87

Page 96: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 11. Constantes

88

Page 97: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 12. Variables

$template_dirC’est le nom par défaut du répertoire des templates. Si vous ne spécifiez aucun che-min lors de l’utilisation de templates, Smarty les cherchera à cet emplacement. Pardéfaut, il s’agit de "./templates", ce qui signifie qu’il va chercher le répertoire tem-plates dans le répertoire où se trouve le script PHP en cours d’exécution.

Note technique : Il n’est pas conseillé de mettre ce répertoire dans l’arborescence Web.

$compile_dirC’est le nom du répertoire où se trouvent les templates compilés. Par défaut, il s’agitde "./templates_c", ce qui signifie que Smarty va chercher ce répertoire dans le mêmerépertoire que le script PHP en cours d’exécution.

Note technique : Ce réglage doit être soit un chemin absolu, soit un chemin relatif.include_path n’est pas utilisé pour écrire des fichiers.

Note technique : Il n’est pas conseillé de mettre ce répertoire sous la racine del’arborescence Web.

$config_dirIl s’agit du répertoire utilisé pour stocker les fichiers de configuration utilisés dans lestemplates. La valeur par défaut est "./configs", ce qui signifie que Smarty va chercherce répertoire dans le même répertoire que le script PHP qui s’exécute.

Note technique : Il n’est pas conseillé de mettre ce répertoire sous la racine del’arborescence Web.

$plugins_dirCe sont les répertoire dans lesquels Smarty ira chercher les plugins dont il a besoin.La valeur par défaut est "plugins" sous le répertoire SMARTY_DIR. Si vous donnezun chemin relatif, Smarty regardera d’abord relativement au SMARTY_DIR, puis re-lativement au rtc (répertoire de travail courant), puis relativement à chaque entréede votre répertoire d’inclusion PHP.

Note technique : Pour des raisons de performances, ne réglez pas votre plugins_dirpour qu’il utilise votre include_path PHP. Utilisez un chemin absolu ou un chemin relatif àSMARTY_DIR ou au rtc.

89

Page 98: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 12. Variables

$debuggingCela active la console de débogage. La console est une fenêtre javascript qui vousinforme des templates inclus et des variables assignées dans la page courante.

$debug_tplC’est le nom du fichier template utilisé pour la console de débuggage. Par défautdebug.tpl, il se situe dans SMARTY_DIR

$debugging_ctrlCela permet d’avoir différents moyens pour activer le débogage. URL signifie quesi SMARTY_DEBUG se trouve dans QUERY_STRING, le débuggage est activé àl’invocation du script. Si $debugging est à vrai, cette valeur est sans effet.

$global_assignC’est une liste de variable qui sont toujours implicitement assignées au moteur detemplates. Ceci est commode pour rendre des variables globales ou des variables duserveur accessibles à tous les templates plutôt que de devoir les assigner à la main.Chaque élément de $global_assign doit être soit le nom de la variable globale, soitune paire clef/valeur, où clef est le nom du tableau global et valeur le tableau de va-riable assignées depuis ce tableau global. $SCRIPT_NAME est globalement assignépar défaut depuis $HTTP_SERVER_VARS.

Note technique : On peut accéder aux variables du serveur avec la variable $smarty,par exemple {$smarty.server.SCRIPT_NAME}. Se reporter à la section sur la variable$smarty.

$undefinedCela règle la valeur de $undefined, null par défaut. N’est actuellement utilisé quepour initialiser des variables non-définies dans $global_assign à des valeurs par dé-faut.

$autoload_filtersSi vous désirez charger des filtres à chaque invocation de templates, vous pouvez lespécifier en utilisant cette variable. Les types de filtres et les valeurs sont des tableauxcomportant le nom des filtres.

$smarty- >autoload_filters = array(’pre’ = > array(’trim’, ’stamp’),’output’ => array(’convert’));

90

Page 99: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 12. Variables

$compile_checkA chaque invocation de l’application PHP, Smarty fait un test pour voir si le templatecourant a été modifié (date de dernière modification différente) depuis sa dernièrecompilation. S’il a changé, le template est recompilé. Si le template n’a pas encore étécompilé, il le sera quelle que soit la valeur ce réglage. Par défaut cette valeur est à vrai.Quand une application est mise en production (les templates ne changent plus), cettevérification n’est pas nécessaire. Assurez-vous de mettre $compile_check à "false"pour des performances maximales. Notez que si vous mettez ce paramètre à "false" etqu’un template est modifié, vous ne verrez *pas* le changement car le template ne se-ra *pas* recompilé. Si le processus de cache est activé et que $compile_check l’est aus-si, alors les fichiers du cache seront regénérés si un template concerné ou un fichier deconfiguration concerné est modifié. Voir aussi $force_compile ou clear_compiled_tpl.

$force_compileCela oblige Smarty à (re)compiler les templates à chaque invocation. Ce réglage sup-plante $compile_check. Par défaut, il est désactivé. Ceci est commode pour le déve-loppement et le débogage mais ne devrait jamais être utilisé dans un environnmentde production. Si le système de cache est actif, les fichiers du cache seront regénérésà chaque appel.

$cachingCe paramètre demande à Smarty de mettre ou non en cache la sortie des templates.Par défaut ce réglage est à 0 (désactivé). Si vos templates génèrent du contenu re-dondant, il est conseillé d’activer le cache. Cela permettra un gain de performanceconséquent. Vous pouvez aussi avoir de nombreux fichiers de cache pour un mêmetemplate. Une valeur de 1 ou 2 active le cache. 1 indique à Smarty d’utiliser la va-riable $cache_lifetime pour déterminer si le fichier de cache a expiré. Une valeur de2 indique à Smarty d’utiliser la valeur $cache_lifetime spécifiée à la génération ducache. Ainsi vous pouvez régler la durée de vie d’un fichier de cache avant de récu-pérer le template pour avoir un certain contrôle quand ce fichier en particulier expire.Voir aussi is_cached.

Si $compile_check est actif, le contenu du cache sera regénéré si un des templates ouun des fichiers de configuration qui fait partie de ce fichier de cache a été modifié. Si$force_compile est actif, le contenu du cache est toujours regénéré.

$cache_dirIl s’agit du nom du répertoire où les caches des templates sont stockés. Par défaut ils’agit de "./cache", ce qui signifie que Smarty va chercher ce répertoire dans le mêmerépertoire que le script PHP en cours d’exécution.

Note technique : Ce réglage doit être soit un chemin absolu, soit un chemin relatif.include_path n’a aucune influence lors de l’écriture des fichiers.

Technical Note : Il n’est pas conseillé de mettre ce répertoire dans l’arborescence Web.

91

Page 100: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 12. Variables

$cache_lifetimeIl s’agit de la durée en secondes pendant laquelle un cache de template est valide.Une fois cette durée dépassée, le cache est regénéré. $caching doit être à "true"pour que $cache_lifetime ait une quelconque utilité. Avec une valeur de -1, le cachen’expire jamais. Avec une valeur de 0, le cache est toujours regénéré (utile à desfins de tests seulement. Une meilleure façon de désactiver le cache est de mettre$caching à "false").

Si $force_compile est activé, les fichiers du cache seront regénérés à chaque fois,désactivant ainsi le cache. Vous pouvez effacer tous les fichiers du cache avec lafunction clear_all_cache() ou de façon individuelle (ou groupée) avec la fonctionclear_cache().

Note technique : Si vous souhaitez donner à certains templates leur propre durée devie en cache, vous pouvez le faire en réglant $caching à 2, puis $cache_lifetime à uneunique valeur juste avant d’appeler display ou fetch().

$cache_handler_funcVous pouvez utiliser votre propre fonction de gestion du cache plutôt que d’utilisercelle livrée avec Smarty. Référez-vous à la section sur la fonction de gestion de cachepersonnalisée pour plus de détails.

$cache_modified_checkSi cette variable est à vrai, Smarty respectera l’en-tête If-Modified-Since envoyé par leclient. Si la date de dernière modification du fichier de cache n’a pas changé depuis ladernière visite, alors un en-tête "304 Not Modified" sera envoyé à la place du contenu.Cela ne fonctionne qu’avec du contenu mis en cache hors de la balise insert.

$config_overwriteSi cette variable est à vrai, les variables lues dans les fichiers de configuration peuvents’écraser entre elles. Sinon les variables seront mises dans un tableau. Très utile sivous voulez stocker des tableaux de données dans des fichiers de configuration, listezsimplement chaque élément plusieurs fois. Mise à faux par défaut.

$config_booleanizeSi cette variable est à vrai, les valeurs on/true/yes et off/false/no dans les fichiersde configuration sont automitiquement converties en booléen. De cette façon vouspouvez utiliser ces valeurs dans le template de la façon suivante : {if #foobar#} ...{/if}. Si foobar est à on, true ou yes, l’instruction {if} sera exécutée. vrai par défaut.

$config_read_hiddenSi cette variable est à vrai, les sections cachés (dont les noms commencent par unpoint) dans les fichiers de configuration peuvent être lues depuis les templates. Onlaisse habituellement cela à faux, de cette façon vous pouvez stocker des donnéessensibles dans les fichiers de configuration, comme par exemple des paramètres debase de données, sans vous soucier de la façon dont les templates les chargent. Miseà faux par défaut.

92

Page 101: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 12. Variables

$config_fix_newlinesSi cette variable est mise à vrai, les caractères de nouvelles lignes mac et dos (\r et\r\n) sont convertis en \n quand ils sont analysés. vrai par défaut.

$default_template_handler_funcCette fonction est appelée quand un template ne peut pas être obtenu avec sa res-source.

$php_handlingIndique à Smarty comment interpréter le code PHP intégré dans les templates. Il ya quatre valeurs possibles, par défaut SMARTY_PHP_PASSTHRU. Notez que celan’affecte PAS le code PHP entouré des balises {php}{/php} dans le template.

• SMARTY_PHP_PASSTHRU - Smarty écrit les balises telles quelles.

• SMARTY_PHP_QUOTE - Smarty transforme les balises en entités HTML.

• SMARTY_PHP_REMOVE - Smarty supprime les balises des templates.

• SMARTY_PHP_ALLOW - Smarty exécute les balises comme du code PHP.

NOTE : Intégrer du code PHP dans les templates est vivement déconseillé. Préférezles fonctions utilisateurs ou les modificateurs de variables.

$securityCette variable est à faux par défaut. $security est de rigueur quand vous n’êtes pascomplètement sûr des personnes qui éditent les templates (par ftp par exemple) etque vous voulez réduire le risque que la sécurité du système soit compromise par lelanguage de template. Activer cette option de sécurité applique les règles suivantesau langage de template, à moins que $security_settings ne spécifie le contraire :

• Si $php_handling est réglée à SMARTY_PHP_ALLOW, cela est implicitementchangé à SMARTY_PHP_PASSTHRU.

• Les fonctions PHP ne sont pas autorisées dans les instructions IF, à part cellesdéclarées dans $security_settings.

• Les templates ne peuvent être inclus que depuis des répertoires listés dans letableau $security_dir.

• Les fichiers locaux ne peuvent être récupérés que depuis les répertoires listés dansle tableau $security_dir en utilisant {fetch}.

• Les balises {php}{/php} ne sont pas autorisées.

• Les fonctions PHP ne sont pas autorisées en tant modificateurs, à part celles spéci-fiées dans $security_settings.

$secure_dirIl s’agit d’un tableau contenant tous les répertoires locaux qui sont considérés commesécurisés. {include} et {fetch} l’utilisent quand la sécurité est activée.

93

Page 102: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 12. Variables

$security_settingsCes réglages servent à écraser ou spécifier les paramètres de sécurité quand celle-ciest activée. Les réglages possibles sont les suivants :

• PHP_HANDLING - true/false. Si vrai, le réglage $php_handling n’est pas vérifié.

• IF_FUNCS - Le tableau des noms de fonctions PHP autorisées dans les intructionsIF.

• INCLUDE_ANY - true/false. Si vrai, les templates peuvent être inclus den’importe où, quelque soit le contenu de $secure_dir.

• PHP_TAGS - true/false. Si vrai, les balises {php}{/php} sont autorisées dans lestemplates.

• MODIFIER_FUNCS - Le tableau des noms de fonctions autorisées à être utiliséescomme modificateurs de variables.

$trusted_dir$trusted_dir n’est utilisée lorsque $security est activée. C’est un tableau de tous lesrépertoires qui peuvent être considérés comme sûrs. Les répertoires sûrs sont ceuxqui contiennent des scripts PHP qui sont exécutés directement depuis les templatesavec {include_php}.

$left_delimiterIl s’agit du délimiteur gauche utilisé par le moteur de templates. La valeur par défautest "{".

$right_delimiterIl s’agit du délimiteur droit utilisé par le moteur de templates. La valeur par défautest "}".

$compiler_classSpécifie le nom de la classe du compilateur qui va être utilisée pour compiler lestemplates. Le compilateur par défaut est ’Smarty_Compiler’. Réservé aux utilisateursavancés.

$request_vars_orderL’ordre dans lequel les variables de requêtes sont enregistrées, identique àvariables_order dans php.ini.

$compile_idIdentifiant persistant du compilateur. On peut passer le même compile_id à chaqueappel de fonction mais une alternative consiste à régler ce compile_id, qui sera utiliséimplicitement.

94

Page 103: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 12. Variables

$use_sub_dirsRégler cela à faux si votre environnement PHP n’autorise pas Smarty à créer des sous-répertoires. Les sous-répertoires sont efficaces, utilisez-les quand vous le pouvez.

$default_modifiersIl s’agit d’un tableau de modificateurs utilisé pour assigner une valeur par défaut àchaque variable dans un template. Par exemple, pour par défaut échapper les carac-tères HTML de chaque variable, utilisez array(’escape:"htmlall"’); Pour rendre unevariable indépendante des modificateurs par défaut, passez-lui en paramètre le mo-dificateur "nodefaults" : {$var|nodefaults}.

95

Page 104: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 12. Variables

96

Page 105: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

append

void append (mixed var );void append (string varname , mixed var );void append (string varname , mixed var , boolean merge );

Utilisée pour ajouter un élément à un tableau assigné. Si vous utilisez cette fonctionavec une chaîne de caractère, elle est convertie en tableau auquel on ajoute ensuitel’élément. Vous pouvez explicitement passer des paires nom/valeur. Si vous passezle troisième paramètre (optionel) à vrai, la valeur sera fusionnée avec le tableau plutôtque d’être ajoutée.

Note technique : Le paramètre de fusion respecte les clés des tableaux, ainsi si vousfusionnez deux tableaux indexés numériquement, ils pourront s’écraser l’un l’autre oudonner des clés qui ne se suivent pas. Cela diffère donc de la fonction PHP array_merge()qui supprime les clés numériques et les renumérote.

Exemple 13-1. append

// passe des paires nom/valeur$smarty->append("Name","Fred");$smarty->append("Address",$address);

// passe un tableau associatif$smarty->append(array("city" => "Lincoln","state" => "Nebraska"));

append_by_ref

void append_by_ref (string varname , mixed var );void append_by_ref (string varname , mixed var , boolean merge );

Utilisée pour ajouter des valeurs à un template par référence plutôt que par copie.Si vous ajoutez une variable par référence puis changez sa valeur, le changementest aussi répercuté sur la valeur assignée. Pour les objets, append_by_ref ne faitpas de copie en mémoire de l’objet assigné. Voir la documentation PHP pour plusd’informations sur les références de variable. Si vous passez le troisième paramètre àvrai, la valeur sera fusionnée avec le tableau courant plutôt que d’être ajoutée.

Note technique : Le paramètre de fusion respecte les clés des tableaux, ainsi si vousfusionnez deux tableaux indexés numériquement, ils pourront s’écraser l’un l’autre oudonner des clés qui ne se suivent pas. Cela diffère donc de la fonction PHP array_merge()qui supprime les clés numériques et les renumérote.

97

Page 106: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

Exemple 13-2. append_by_ref

// ajoute des paires nom/valeur$smarty->append_by_ref("Name",$myname);$smarty->append_by_ref("Address",$address);

assign

void assign (mixed var );void assign (string varname , mixed var );

Utilisée pour assigner des valeurs aux templates. Vous pouvez explicitement passerdes paires nom/valeur, ou des tableaux associatifs contenant des paires nom/valeur.

Exemple 13-3. assign

// passe des paires nom/valeur$smarty->assign("Name","Fred");$smarty->assign("Address",$address);

// passe un tableau associatif$smarty->assign(array("city" => "Lincoln","state" => "Nebraska"));

assign_by_ref

void assign_by_ref (string varname , mixed var );

Utilisée pour assigner des valeurs aux templates par référence plutôt que par copie.Référez-vous au manuel PHP pour une explication plus précise sur les références desvariables.

Note technique : Si vous assignez une variable par référence puis changez sa valeur, lechangement est aussi répercuté sur la valeur assignée. Pour les objets, assign_by_ref nefait pas de copie en mémoire de l’objet assigné. Référez-vous au manuel PHP pour uneexplication plus précise sur les références de variable.

Exemple 13-4. assign_by_ref

// passe des paires noms/valeurs$smarty->assign_by_ref("Name",$myname);$smarty->assign_by_ref("Address",$address);

clear_all_assign

void clear_all_assign ();

98

Page 107: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

Utilisée pour effacer les valeurs de toutes les variables assignées.

Exemple 13-5. clear_all_assign

// efface toutes les variables assignées$smarty->clear_all_assign();

clear_all_cache

void clear_all_cache (int expire time );

Utilisée pour effacer les fichiers de cache des templates. Vous pouvez passer un para-mètre optionnel afin d’indiquer l’âge minimun que doivent avoir les fichiers de cachepour qu’ils soient effacés.

Exemple 13-6. clear_all_cache

// efface le cache$smarty->clear_all_cache();

clear_assign

void clear_assign (string var );

Efface la valeur d’une variable assignée. Il peut s’agir d’une simple valeur ou d’untableau de valeur.

Exemple 13-7. clear_assign

// efface une variable$smarty->clear_assign("Name");

// efface plusieurs variables$smarty->clear_assign(array("Name","Address","Zip"));

clear_cache

void clear_cache (string template , string [cache id] , string [compileid] , int [expire time] );

Utilisée pour nettoyer le(s) fichier(s) de cache d’un template en particulier. Si vousavez plusieurs fichiers de cache pour ce template vous pouvez en spécifier un enparticulier en passant son identifiant en deuxième paramètre. Vous pouvez aussi pas-ser un identifiant de compilation en troisième paramètre. Vous pouvez grouper destemplates ensemble afin qu’ils puissent être supprimés en groupe. Référez-vous àla section sur le cache pour plus d’informations. Vous pouvez passer un quatrième

99

Page 108: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

paramètre pour indiquer un âge minimum en secondes que le fichier en cache doitavoir avant d’être effacé.

Exemple 13-8. clear_cache

// efface le fichier de cache de ce template$smarty->clear_cache("index.tpl");

// efface un fichier de cache grâce à son identifiant de cache$smarty->clear_cache("index.tpl","CACHEID");

clear_compiled_tpl

void clear_compiled_tpl (string tpl_file );

Utilisée pour effacer la version compilée du template spécifié ou de tous les templatessi aucun n’est spécifié. Cette fonction est destinée à un usage avancé et n’est pashabituellement utilisée.

Exemple 13-9. clear_compiled_tpl

// efface la version compilée du template spécifié$smarty->clear_compiled_tpl("index.tpl");

// efface tout le contenu du répertoire des templates compilés$smarty->clear_compiled_tpl();

clear_config

void clear_config (string [var] );

Utilisée pour effacer toutes les variables de configuration s’étant vues assigner unevaleur. Si une variable est spécifiée, seule cette variable est effacée.

Exemple 13-10. clear_config

// efface toutes les variables de configuration assignées$smarty->clear_config();

// efface une seule variable$smarty->clear_config(’foobar’);

config_load

void config_load (string file , string [section] );

Utilisée pour charger des données d’un fichier de config et les assigner à un template.Cette fonction fonctionne exactement comme la fonction de template config_load.

100

Page 109: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

Note technique : Comme pour Smarty 2.4.0, les variables de templates assignées sontconservées entre chaque appel à fetch et display. Les variables de configuration chargéesavec config_load sont globales. Les fichiers de config sont aussi compilés pour une exé-cution plus rapide et respecte les réglages de force_compile et de compile_check.

Exemple 13-11. config_load

// charge les variables de configuration et les assigne$smarty->config_load(’my.conf’);

// charge une section$smarty->config_load(’my.conf’,’foobar’);

display

void display (string template , string [cache_id] , string[compile_id] );

Utilisée pour afficher un template. Il faut fournir un type et un chemin de ressourcetemplate valides. Vous pouvez passer en second paramètre un identifiant de fichierde cache. Reportez-vous à la section cache pour plus de renseignements.

Le troisième paramètre optionnel est un identifiant de compilation. Cela s’avère utilequand vous voulez compiler différentes versions d’un même template, pour parexemple avoir des templates compilés séparés pour différents langages. Une autreutilité de ce paramètre est le cas où vous utilisez plus d’un $template_dir mais unseul $compile_dir, car certains templates avec le même nom s’écraseraient entre eux.Vous pouvez aussi régler la variable $compile_id une seule fois au lieu de la passer àchaque appel.

Exemple 13-12. affichage

include("Smarty.class.php");$smarty = new Smarty;$smarty->caching = true;

// ne fait un appel à la base de données que si le fichier// de cache n’existe pasif(!$smarty->is_cached("index.tpl")){

// quelques données$address = "245 N 50th";$db_data = array(

"City" => "Lincoln","State" => "Nebraska","Zip" = > "68502");

$smarty->assign("Name","Fred");$smarty->assign("Address",$address);$smarty->assign($db_data);

}

// display the output$smarty->display("index.tpl");

101

Page 110: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

Utilisez la syntaxe des ressources templates pour afficher des fichiers en-dehors durépertoire $template_dir

Exemple 13-13. exemples de fonction d’affichage de ressources templates

// chemin absolu$smarty->display("/usr/local/include/templates/header.tpl");

// chemin absolu (pareil)$smarty->display("file:/usr/local/include/templates/header.tpl");

// chemin absolu Windows (on DOIT utiliser le préfixe "file:")$smarty->display("file:C:/www/pub/templates/header.tpl");

// inclue à partir de la ressource template "db"$smarty->display("db:header.tpl");

fetch

string fetch (string template , string [cache_id] , string[compile_id] );

Utilisée pour renvoyer le résultat du template plutôt que de l’afficher. Il faut passerun type et un chemin de ressource template valides. Vous pouvez passer un identi-fiant de cache en deuxième paramètre. Reportez-vous à la section cache pour plusde renseignements.

Un troisième paramètre optionnel est un identifiant de compilation. Cela s’avère utilequand vous voulez compiler différentes versions d’un même template, pour parexemple avoir des templates compilés séparés pour différents langages. Une autreutilité de ce paramètre est le cas où vous utilisez plus d’un $template_dir mais unseul $compile_dir, car certains templates avec le même nom s’écraseraient entre eux.Vous pouvez aussi régler la variable $compile_id une seule fois plutôt que de la pas-ser à chaque appel.

Exemple 13-14. fetch

include("Smarty.class.php");$smarty = new Smarty;

$smarty->caching = true;

// ne fait un appel à la base de données que si le fichier// de cache n’existe pasif(!$smarty->is_cached("index.tpl")){

// quelques données$address = "245 N 50th";$db_data = array(

"City" => "Lincoln","State" => "Nebraska","Zip" = > "68502");

$smarty->assign("Name","Fred");$smarty->assign("Address",$address);$smarty->assign($db_data);

102

Page 111: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

}

// récupère le résultat$output = $smarty->fetch("index.tpl");

// fait quelque chose avec $output

echo $output;

get_config_vars

array get_config_vars (string [varname] );

Retourne la valeur de la variable de configuration passée en paramètre. Si aucunparamètre n’est donné, un tableau de toutes les variables de configuration chargéesest renvoyé.

Exemple 13-15. get_config_vars

// récupère la variable de configuration chargée ’foo’$foo = $smarty->get_config_vars(’foo’);

// récupère toutes les variables de configuration chargées$config_vars = $smarty->get_config_vars();

// les affiche à l’écranprint_r($config_vars);

get_registered_object

array get_registered_object (string object_name );

Retourne la référence d’un objet enregistré. Utile quand vous voulez accéder directe-ment à un objet enregistré avec une fonction utilisateur.

Exemple 13-16. get_registered_object

function smarty_block_foo($params, &$smarty) {if (isset[$params[’object’]]) {

// récupère la référence de l’objet enregistré$obj_ref =& $smarty->get_registered_object($params[’object’]);

// $obj_ref est maintenant une référence vers l’objet}

}

get_template_vars

array get_template_vars (string [varname] );

103

Page 112: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

Retourne la valeur assignée passée en paramètre. Si aucun paramètre n’est donné, untableau de toutes les variables assignées est renvoyé.

Exemple 13-17. get_template_vars

// récupère la variable ’foo’ assignée au template// get assigned template var ’foo’$foo = $smarty->get_template_vars(’foo’);

// récupère toutes les variables assignées à ce template$tpl_vars = $smarty->get_template_vars();

// les affiche à l’écranprint_r($tpl_vars);

is_cached

void is_cached (string template , [string cache_id ]);

Retourne vrai s’il y a un fichier de cache valide pour ce template. Cela fonctionneseulement si caching est à vrai.

Exemple 13-18. is_cached

$smarty->caching = true;

if(!$smarty->is_cached("index.tpl")) {// faire des requêtes base de données et assigner// des variables ici.

}

$smarty->display("index.tpl");

Vous pouvez aussi passer en second paramètre un identifiant de cache au cas où vousvoudriez plusieurs fichiers de cache pour ce template.

Exemple 13-19. is_cached with multiple-cache template

$smarty->caching = true;

if(!$smarty->is_cached("index.tpl","FrontPage")) {// faire des requêtes base de données et assigner// des variables ici.

}

$smarty->display("index.tpl","FrontPage");

load_filter

void load_filter (string type , string name);

Cette fonction peut être utilisée pour charger un plugin de filtrage. Le premier argu-ment spécifie le type du filtre et peut prendre l’une des valeurs suivantes : ’pre’, ’post’

104

Page 113: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

ou ’output’. Le second argument spécifie le nom du plugin de filtrage, par exemple’trim’.

Exemple 13-20. Chargement de plugins de filtrage

$smarty->load_filter(’pre’, ’trim’); // charge le filtre ’trim’ de type ’pre’$smarty->load_filter(’pre’, ’datefooter’); // charge un autre filtre de type ’pre’ ap-pelé ’datefooter’$smarty->load_filter(’output’, ’compress’); // charge le filtre ’com-press’ de type ’output’

register_block

void register_block (string name, string impl );

Utilisée pour déclarrer dynamiquement des plugins de fonction de blocs. Il faut pas-ser en paramètre le nom de la fonction de blocs, suivi du nom de la fonction PHP quil’implémente.

Exemple 13-21. register_block

/* PHP */$smarty->register_block("translate", "do_translation");

function do_translation ($params, $content, &$smarty) {if ($content) {

$lang = $params[’lang’];// fait de la traduction avec la variable $contentecho $translation;

}}

{* template *}{translate lang="br"}

Hello, world!{/translate}

register_compiler_function

void register_compiler_function (string name, string impl );

Utilisée pour déclarer dynamiquement un plugin de fonction de compilation. Il fautpasser en paramètres le nom de la fonction de compilation, suivi par la fonction PHPqui l’implémente.

register_function

void register_function (string name, string impl );

105

Page 114: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

Utilisée pour déclarer dynamiquement des plugins de fonction de templates. Il fautpasser en paramètres le nom de la fonction de templates, suivi par le nom de la fonc-tion PHP qui l’implémente.

Exemple 13-22. register_function

$smarty->register_function("date_now", "print_current_date");

function print_current_date ($params) {extract($params);if(empty($format))

$format="%b %e, %Y";echo strftime($format,time());

}

// vous pouvez maintenant utiliser ceci dans Smarty pour afficher// la date actuelle : {date_now} ou {date_now format="%Y/%m/%d"}// pour la formater

register_modifier

void register_modifier (string name, string impl );

Utilisée pour déclarer dynamiquement un plugin de modificateur. Il faut passeren paramètre le nom du modificateur de variables, suivi de la fonction PHP quil’implémente.

Exemple 13-23. register_modifier

// associons la fonction PHP stripslashes à un modificateur Smarty.

$smarty->register_modifier("sslash","stripslashes");

// vous pouvez maintenant utiliser {$var|sslash} pour supprimer les slash des vari-ables

register_object

void register_object (string object_name , object $object , array allowedmethods/properties , boolean format );

Utilisée pour enregistrer un objet à utiliser dans un template. Reportez-vous à la sec-tion objet de ce manuel pour des exemples.

register_outputfilter

void register_outputfilter (string function_name );

106

Page 115: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

Utilisée pour déclarer dynamiquement des filtres de sortie, pour agir sur la sortied’un template avant qu’elle ne soit affichée. Reportez-vous à la section filtres desortie pour plus d’information sur le sujet.

register_postfilter

void register_postfilter (string function_name );

Utilisée pour déclarer dynamiquement des filtres de post-compilation pour y fairepasser des templates une fois qu’ils ont été compilés. Reportez-vous à la section filtresde post-compilation de templates pour avoir plus de renseignements sur la façon deparamétrer les fonctions de post-compilation.

register_prefilter

void register_prefilter (string function_name );

Utilisée pour déclarer dynamiquement des filtres de pré-compilation pour y fairepasser des templates avant qu’ils ne soient compilés. Reportez-vous à la section filtresde pré-compilation de templates pour avoir plus de renseignements sur la façon deparamétrer les fonctions de pré-compilation.

register_resource

void register_resource (string name, array resource_funcs );

Utilisée pour déclarer dynamiquement une ressource plugin dans Smarty. Il fautpasser en paramètre le nom de la ressource et le tableau des fonctions PHP quil’implémentent. Reportez-vous à la section ressources templates pour avoir plusd’informations sur la façon de paramétrer une fonction récupérant des templates.

Exemple 13-24. register_resource

$smarty->register_resource("db", array("db_get_template","db_get_timestamp","db_get_secure","db_get_trusted"));

trigger_error

void trigger_error (string error_msg , [int level ]);

Cette fonction peut-être utilisée pour afficher un message d’erreur en utilisant Smar-ty. Le paramètre level peut prendre l’une des valeures utilisées par la fonction PHP

107

Page 116: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

trigger_error, i.e. E_USER_NOTICE, E_USER_WARNING, etc. Par défaut il s’agit deE_USER_WARNING.

template_exists

bool template_exists (string template );

Cette fonction vérifie si le template spécifié existe. Elle accepte soit un chemin versle template, soit une ressource de type chaîne de caractères précisant le nom du tem-plate.

unregister_block

void unregister_block (string name);

Utilisée pour désallouer dynamiquement un plugin de fonction de blocs. Passez enparamètre le nom du bloc.

unregister_compiler_function

void unregister_compiler_function (string name);

Utilisée pour désallouer dynamiquement un fonction de compilation. Passez en pa-ramètre le nom de la fonction de compilation.

unregister_function

void unregister_function (string name);

Utilisée pour désallouer dynamiquement un plugin de fonction de templates. Passezen paramètres le nom de la fonction de templates.

Exemple 13-25. unregister_function

// nous ne voulons pas que les designers de templates aient accès// au système de fichiers.

$smarty->unregister_function("fetch");

108

Page 117: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

unregister_modifier

void unregister_modifier (string name);

Utilisée pour désallouer dynamiquement un plugin modificateur de variable. Passezen paramètre le nom du modificateur de templates.

Exemple 13-26. unregister_modifier

// nous ne voulons pas que les designers de templates// suppriment les balises des élements

$smarty->unregister_modifier("strip_tags");

unregister_object

void unregister_object (string object_name );

Utilisée pour désallouer un objet.

unregister_outputfilter

void unregister_outputfilter (string function_name );

Utilisée pour désallouer dynamiquement un filtre de sortie.

unregister_postfilter

void unregister_postfilter (string function_name );

Utilisée pour désallouer dynamiquement un filtre de post-compilation.

unregister_prefilter

void unregister_prefilter (string function_name );

Utilisée pour désallouer dynamiquement un filtre de pré-compilation.

109

Page 118: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 13. Méthodes

unregister_resource

void unregister_resource (string name);

Utilisée pour désallouer dynamiquement un plugin ressource. Passez en paramètrele nom de la ressource.

Exemple 13-27. unregister_resource

$smarty->unregister_resource("db");

110

Page 119: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 14. Cache

Le cache est utilisée pour accélérer l’appel de display() ou de fetch() en sauvegardantleur résultat dans un fichier. Si un fichier de cache est disponible lors d’un appel, ilsera affiché sans qu’il ne soit nécessaire de regénérer le résultat. Le système de cachepeut accélérer les traitements de façon impressionnante, en particulier les templatesdont la compilation est très longue. Comme le résultat de display() ou de fetch() estdans le cache, un fichier de cache peut être composé de plusieurs fichiers de tem-plates, plusieurs fichiers de configuration, etc.

Comme les templates sont dynamiques, il est important de faire attention à la façondont les fichiers de cache sont générés, et pour combien de temps. Si par exemplevous affichez la page d’accueil de votre site Web dont le contenu ne change pas sou-vent, il peut être intéressant de mettre cette page dans le cache pour une heure ouplus. A l’inverse, si vous affichez une page de météo mises à jour toutes les minutes,mettre cette page en cache n’a aucun sens.

Paramétrer le cacheLa première chose à faire est d’activer le cache. Cela est fait en mettant $caching =true (ou 1).

Exemple 14-1. activation du cache

require(’Smarty.class.php’);$smarty = new Smarty;

$smarty->caching = true;

$smarty->display(’index.tpl’);

Avec le cache activé, la fonction display(’index.tpl’) va afficher le template mais sau-vegardera par la même occasion une copie du résultat dans un fichier (de cache) durépertoire $cache_dir. Au prochain appel de display(’index.tpl’), le fichier de cachesera préféré à la réutilisation du template.

Note technique : Les fichiers situés dans $cache_dir sont nommés de la même façonque les templates. Bien qu’ils aient une extension ".php", ils ne sont pas vraiment exé-cutable. N’éditez surtout pas ces fichiers !

Tout fichier de cache à une durée de vie limitée déterminée par $cache_lifetime. Lavaleur par défaut est 3600 secondes, i.e. 1 heure. Une fois que cette durée est dépas-sée, le cache est regénéré. Il est possible de donner une durée d’expiration propre àchaque fichier de cache en réglant $caching = 2. Se reporter à la documentation de$cache_lifetime pour plus de détails.

Exemple 14-2. réglage individuel de cache_lifetime

require(’Smarty.class.php’);$smarty = new Smarty;

$smarty->caching = 2; // régler la durée de vie individuellement

// régle la durée de vie du cache à 15 minutes pour index.tpl$smarty->cache_lifetime = 300;$smarty->display(’index.tpl’);

// régle la durée de vie du cache à 1 heure pour home.tpl$smarty->cache_lifetime = 3600;

111

Page 120: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 14. Cache

$smarty->display(’home.tpl’);

// NOTE : le réglage suivant ne fonctionne pas quand $caching = 2. La durée de vie// du fichier de cache de home.tpl a déjà été réglée à 1 heure et ne respectera// plus la valeur de $cache_lifetime. Le cache de home.tpl expirera toujours// dans 1 heure.$smarty->cache_lifetime = 30; // 30 secondes$smarty->display(’home.tpl’);

Si $compile_check est actif, chaque fichier de template et de configuration qui a unrapport avec le fichier de cache sera vérifié pour détecter une éventuelle modification.Si l’un de ces fichiers a été modifié depuis que le fichier de cache a été généré, lecache est immédiatement regénéré. Ce processus est coûteux, donc, pour des raisonsde performances, mettez ce paramètre à false pour une application en production.

Exemple 14-3. activation de $compile_check

require(’Smarty.class.php’);$smarty = new Smarty;

$smarty->caching = true;$smarty->compile_check = true;

$smarty->display(’index.tpl’);

Si $force_compile est actif, les fichiers de cache sont toujours regénérés. Ceci revientfinalement à désactiver le cache. $force_compile est utilisé à des fins de débogage, unmoyen plus efficace de désactiver le cache est de régler $caching = false (ou 0).

La fonction is_cached() permet de tester si un template a ou non un fichier de cachevalide. Si vous disposez d’un template en cache qui requiert une requête à une basede données, vous pouvez utiliser cette méthode plutôt que $compile_check.

Exemple 14-4. utilisation de is_cached()

require(’Smarty.class.php’);$smarty = new Smarty;

$smarty->caching = true;

if(!$smarty->is_cached(’index.tpl’)) {// pas de cache disponible, on assigne

$contents = get_database_contents();$smarty->assign($contents);

}

$smarty->display(’index.tpl’);

Vous pouvez rendre dynamiques seulement certaines parties d’une page avec la fonc-tion de templates insert. Imaginons que toute une page doit être mise en cache à partune bannière en bas à droite. En utilisant une fonction insert pour la bannière, vouspouvez garder cet élément dynamique dans le contenu qui est en cache. Reportez-vous à la documentation insert pour plus de détails et des exemples.

Vous pouvez effacer tous les fichiers du cache avec la fonction clear_all_cache(), oude façon individuelle (ou par groupe) avec la fonction clear_cache().

112

Page 121: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 14. Cache

Exemple 14-5. nettoyage du cache

require(’Smarty.class.php’);$smarty = new Smarty;

$smarty->caching = true;

// efface tous les fichiers du cache$smarty->clear_all_cache();

// efface le fichier de cache du template ’index.tpl’$smarty->clear_cache(’index.tpl’);

$smarty->display(’index.tpl’);

Caches multiples pour une seule pageVous pouvez avoir plusieurs fichiers de caches pour un même appel aux fonctionsdisplay() ou fetch(). Imaginons qu’un appel à display(’index.tpl’) puisse avoir plu-sieurs résultats, en fonction de certaines conditions, et que vous vouliez des fichiersde cache séparés pour chacun d’eux. Vous pouvez faire cela en passant un identifiantde cache (cache_id) en deuxième paramètre à l’appel de fonction.

Exemple 14-6. Passage d’un cache_id à display()

require(’Smarty.class.php’);$smarty = new Smarty;

$smarty->caching = true;

$my_cache_id = $_GET[’article_id’];

$smarty->display(’index.tpl’,$my_cache_id);

Nous passons ci-dessus la variable $my_cache_id à display() comme identifiant decache. Pour chaque valeur distincte de $my_cache_id, un fichier de cache distinct vaêtre créé. Dans cet exemple, "article_id" a été passé dans l’URL et est utilisé en tantqu’identifiant de cache.

Note technique : Soyez prudent en passant des valeurs depuis un client (navigateurWeb) vers Smarty (ou vers n’importe quelle application PHP). Bien que l’exemple ci-dessus consistant à utiliser article_id depuis l’URL puisse paraître commode, le résultatpeut s’avérer mauvais. L’identifiant de cache est utilisé pour créer un répertoire sur le sys-tème de fichiers, donc si l’utilisateur décide de donner une très grande valeur à article_idou d’écrire un script qui envoie des article_id de façon aléatoire, cela pourra causer desproblèmes coté serveur. Assurez-vous de bien tester toute donnée passée en paramètreavant de l’utiliser. Dans cet exemple, peut-être savez-vous que article_id a une longueurde 10 caractères, est exclusivement composé de caractères alph-numériques et doit avoirune valeur contenue dans la base de données. Vérifiez-le bien !

Assurez-vous de bien passer le même identifiant aux fonctions is_cached() etclear_cache().

Exemple 14-7. passer un cache_id à is_cached()

require(’Smarty.class.php’);$smarty = new Smarty;

$smarty->caching = true;

113

Page 122: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 14. Cache

$my_cache_id = $_GET[’article_id’];

if(!$smarty->is_cached(’index.tpl’,$my_cache_id)) {// pas de fichier de cache dispo, on assigne donc les variables$contents = get_database_contents();$smarty->assign($contents);

}

$smarty->display(’index.tpl’,$my_cache_id);

Vous pouvez effacer tous les fichiers de cache pour un identifiant de cache particulieren passant null en tant que premier paramètre à clear_cache().

Exemple 14-8. effacement de tous les fichiers de cache pour un identifiant de cacheparticulier

require(’Smarty.class.php’);$smarty = new Smarty;

$smarty->caching = true;

// efface tous les fichiers de cache avec "sports" comme identifiant$smarty->clear_cache(null,"sports");

$smarty->display(’index.tpl’,"sports");

De cette manière vous pouvez "grouper" vos fichiers de cache en leur donnant lemême identifiant.

groupes de fichiers de cacheVous pouvez faire des groupements plus élaborés en paramétrant les groupesd’identifiant de cache. Il suffit de séparer chaque sous-groupes avec une barreverticale "|" dans la valeur de l’identifiant de cache. Vous pouvez faire autant desous-groupes que vous le désirez.

Exemple 14-9. groupes d’identifiants de cache

require(’Smarty.class.php’);$smarty = new Smarty;

$smarty->caching = true;

// efface tous les fichiers de cache avec "sports|basketball" comme premiers// groupes d’identifiants de cache$smarty->clear_cache(null,"sports|basketball");

// efface tous les fichiers de cache "sports" comme premier groupe d’identifiants.// Inclue donc "sports|basketball" ou "sports|nimportequoi|nimportequoi|..."$smarty->clear_cache(null,"sports");

$smarty->display(’index.tpl’,"sports|basketball");

Note technique : Le système de cache n’utilise PAS le chemin vers le templateen quoi que ce soit pour l’identifiant de cache. Si par exemple vous faitesdisplay(’themes/blue/index.tpl’), vous ne pouvez pas effacer tous les fichiers de cachedans le répertoire "theme/blue". Si vous voulez faire cela, vous devez les grouperavec un même identifiant de cache, display(’themes/blue/index.tpl’,’themes|blue’).Vous pouvez ensuite effacer les fichiers de cache pour blue et theme avecclear_cache(null,’theme|blue’).

114

Page 123: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 15. Fonctionnalités avancées

ObjetsSmarty donne l’accès aux objets PHP à travers les templates. Il y a 2 moyens d’y avoiraccès. Le premier consiste à allouer les objets au template puis de les utiliser avec unesyntaxe similaire à celles des fonctions personnalisées. Le deuxième moyen consisteà allouer des objets aux templates et de les utiliser comme n’importe quelle variable.La première méthode a une syntaxe beaucoup plus sympathique. Elle est aussi plussécurisée, puisqu’un objet alloué ne peut avoir accès qu’à certaines méthodes et pro-priétés. Néanmoins, un objet alloué ne peut pas avoir de lien sur lui-même ou êtremis dans un tableau d’objet, etc. Vous devez choisir la méthode qui correspond àvos besoins, mais tâchez d’utiliser la première méthode autant que possible afin deréduire la syntaxe des templates au minimum.

Si l’option de sécurité est activée, aucune méthode ou fonctions privées n’est acces-sible (commençant par "_"). S’il existe une méthode et une propriété du même nom,c’est la méthode qui sera utilisée.

Vous pouvez restreindre l’accès aux méthodes et aux propriétés en les listant dans untableau en tant que troisième paramètre d’allocation.

Par défaut, les paramètres passés aux objets depuis le templates le sont de la même fa-çon que les fonctions utilisateurs les récupèrent. Le premier paramètre correspond àun tableau associatif, le second à l’objet Smarty. Si vous souhaitez que les paramètressoient passées un à un, comme dans un appel traditionnel, définissez registration,quatrième paramètre optionnel, à false.

Exemple 15-1. utilisation d’un objet alloué ou assigné

<?php// la classe

class My_Object() {function meth1($params, &$smarty_obj) {

return "this is my meth1";}

}

$myobj = new My_Object;// enregistre l’objet$smarty->register_object("foobar",$myobj);// on restreint l’accès à certaines méthodes et propriétés en les listant$smarty->register_object("foobar",$myobj,array(’meth1’,’meth2’,’prop1’));// pour utiliser le format habituel de paramètre objet, passez le booléen = false$smarty->register_object("foobar",$myobj,null,false);

// on peut aussi assigner des objets. Assignez par référence quand c’est possible$smarty->assign_by_ref("myobj", $myobj);

$smarty->display("index.tpl");?>

TEMPLATE:

{* accès à notre objet enregistré *}{foobar->meth1 p1="foo" p2=$bar}

{* on peut aussi assigner la sortie *}{foobar->meth1 p1="foo" p2=$bar assign="output"}the output was {$output)

{* access our assigned object *}

115

Page 124: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 15. Fonctionnalités avancées

{$myobj->meth1("foo",$bar)}

Filtres de pré-compilationLes filtres de pré-compilation sont des fonctions PHP que vos templates exécutentavant qu’ils ne soient compilés. Cela peut être utile pour pré-traiter vos templatesafin d’enlever les commentaires inutiles, garder un oeil sur ce que les gens mettentdans leurs templates, etc. Les filtre de pré-compilations peuvent être soit déclarés soitchargés à partir des répertoires de plugins en utilisant la fonction load_filter() ou enréglant la variable $autoload_filters. Smarty passera à la fonction le code source entant que premier argument, et attendra en retour le code modifié.

Exemple 15-2. Utilisation un filtre de pré-compilation de template

<?php// mettre ceci dans votre applicationfunction remove_dw_comments($tpl_source, &$smarty){

return preg_replace("/ <!--#.*-- >/U","",$tpl_source);}

// enregistrer le filtre de pré-compilation$smarty->register_prefilter("remove_dw_comments");$smarty->display("index.tpl");?>

{* template Smarty index.tpl *}<!--# cette ligne va être supprimée par le filtre de pré-compilation -- >

Filtres de post-compilationLes filtres de post-compilation sont des fonctions PHP que vos templates exécutentaprès avoir été compilés. Les filtres de post-compilation peuvent être soit déclaréssoit chargés depuis les répertoires des plugins en utilisant la fonction load_filter()ou en réglant la variable $autoload_filters. Smarty passera le template compilé entant que premier paramètre et attendra de la fonction qu’elle retourne le résultat del’exécution.

Exemple 15-3. utilisation d’un filtre de post-compilation de templates

<?php// mettez cela dans votre applicationfunction add_header_comment($tpl_source, &$smarty){

return " <?php echo \" <!-- Created by Smarty! -- >\n\" ? >\n".$tpl_source;}

// enregistre le filtre de post-compilation$smarty->register_postfilter("add_header_comment");$smarty->display("index.tpl");?>

{* template Smarty compilé index.tpl *}<!-- Created by Smarty! -- >{* reste du contenu du template... *}

116

Page 125: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 15. Fonctionnalités avancées

Filtres de sortieQuand le template est appelé via les fonctions display() ou fetch(), sa sortie est en-voyée à travers un ou plusieurs filtres de sorties. Ils diffèrent des filtres de post-compilation dans le sens ou ils agissent sur la sortie des templates, une fois exécutés,et non sur les sources des templates.

Les filtres de sortie peuvent être soit déclarés soit chargés depuis les répertoires desplugins en utilisant la fonction load_filter() ou en réglant la variable $autoload_filters.Smarty passera la sortie du template en premier argument et attendra de la fonctionqu’elle retourne le résultat de l’exécution.

Exemple 15-4. utilisation d’un filtre de sortie

<?php// mettez ceci dans votre applicationfunction protect_email($tpl_output, &$smarty){

$tpl_output =preg_replace(’!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!’,

’$1%40$2’, $tpl_output);return $tpl_output;

}

// enregistre le filtre de sortie$smarty->register_outputfilter("protect_email");$smarty->display("index.tpl");

// dorénavant toute occurence d’un adresse email dans le résultat du template// aura un protection simple contre les robots spammers?>

Fonction de gestion du cacheUne alternative au mécanisme de cache par défaut (basé sur des fichiers de cache)consiste à spécifier une fonction de gestion de cache utilisateur qui sera utilisée pourlire, écrire et effacer les fichiers de cache.

Il suffit de créer dans votre application une fonction que Smarty utilisera pourla gestion du cache et d’assigner le nom de cette fonction à la variable de classe$cache_handler_func. Smarty utilisera alors cette fonction pour gérer les donnéesdu cache. Le premier argument est l’action, qui sera ’read’, ’write’ ou ’clear’. Lesecond paramètre est l’objet Smarty. Le troisième est le contenu du cache. Pourécrire, Smarty passe le contenu du cache dans ces paramètres. Pour lire, Smartys’attend à ce que votre fonction accepte ce paramètre par référence et que vous leremplissiez avec les données du cache. Pour effacer, il suffit de passer une variablefictive car cette dernière n’est pas utilisée. Le quatrième paramètre est le nom dufichier de template (utile pour lire/écrire), le cinquième paramètre est l’identifiantde cache (optionnel) et le sixième est l’identifiant de compilation.

Exemple 15-5. exemple d’utilisation de MySQL pour la source du cache

<?php/*

exemple d’usage :

include(’Smarty.class.php’);include(’mysql_cache_handler.php’);

$smarty = new Smarty;$smarty- >cache_handler_func = ’mysql_cache_handler’;

117

Page 126: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 15. Fonctionnalités avancées

$smarty- >display(’index.tpl’);

la base mysql est attendu dans ce format :

create database SMARTY_CACHE;

create table CACHE_PAGES(CacheID char(32) PRIMARY KEY,CacheContents MEDIUMTEXT NOT NULL);

*/

function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null){

// l’hôte de la bd, l’utilisateur, et le mot de passe$db_host = ’localhost’;$db_user = ’myuser’;$db_pass = ’mypass’;$db_name = ’SMARTY_CACHE’;$use_gzip = false;

// crée un identifiant de cache unique$CacheID = md5($tpl_file.$cache_id.$compile_id);

if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {$smarty_obj- >_trigger_error_msg("cache_handler: could not connect to database");return false;

}mysql_select_db($db_name);

switch ($action) {case ’read’:

// récupère le cache dans la base de données$results = mysql_query("select CacheContents from CACHE_PAGES where CacheID=’$CacheID’");if(!$results) {

$smarty_obj- >_trigger_error_msg("cache_handler: query failed.");}$row = mysql_fetch_array($results,MYSQL_ASSOC);

if($use_gzip && function_exists("gzuncompress")) {$cache_contents = gzuncompress($row["CacheContents"]);

} else {$cache_contents = $row["CacheContents"];

}$return = $results;break;

case ’write’:// sauvegarde le cache dans la base de données

if($use_gzip && function_exists("gzcompress")) {// compresse le contenu pour gagner de la place$contents = gzcompress($cache_content);

} else {$contents = $cache_content;

}$results = mysql_query("replace into CACHE_PAGES values(

’$CacheID’,’".addslashes($contents)."’)

");if(!$results) {

$smarty_obj- >_trigger_error_msg("cache_handler: query failed.");}$return = $results;

118

Page 127: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 15. Fonctionnalités avancées

break;case ’clear’:

// efface les données du cacheif(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {

// les efface toutes$results = mysql_query("delete from CACHE_PAGES");

} else {$results = mysql_query("delete from CACHE_PAGES where CacheID=’$CacheID’");

}if(!$results) {

$smarty_obj- >_trigger_error_msg("cache_handler: query failed.");}$return = $results;break;

default:// erreur, action inconnue$smarty_obj- >_trigger_error_msg("cache_handler: unknown action \"$action\"");$return = false;break;

}mysql_close($link);

return $return;

}

?>

RessourcesLes templates peuvent provenir d’une grande variété de ressources. Quand vous af-fichez ou récupérez un template, ou quand vous incluez un template dans un autretemplate, vous fournissez un type de ressource, suivi par le chemin approprié et lenom du template.

Templates depuis $template_dir

Les templates du répertoire $template_dir n’ont pas besoin d’une ressource template,bien que vous puissiez utiliser la ressource "file" pour être cohérent. Vous n’avez qu’àfournir le chemin vers le template que vous voulez utiliser, relatif au répertoire racine$template_dir.

Exemple 15-6. Utilisation de templates depuis $template_dir

// le script PHP$smarty->display("index.tpl");$smarty->display("admin/menu.tpl");$smarty->display("file:admin/menu.tpl"); // le même que celui ci-dessus

{* le template Smarty *}{include file="index.tpl"}{include file="file:index.tpl"} {* le même que celui ci-dessus *}

Templates à partir de n’importe quel répertoire

Les templates en-dehors du répertoire $template_dir nécessitent le type de ressourcetemplate, suivi du chemin absolu et du nom du template.

119

Page 128: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 15. Fonctionnalités avancées

Exemple 15-7. utilisation d’un template depuis n’importe quel répertoire

// le script PHP$smarty->display("file:/export/templates/index.tpl");$smarty->display("file:/path/to/my/templates/menu.tpl");

{* le template Smarty *}{include file="file:/usr/local/share/templates/navigation.tpl"}

Chemin de fichiers Windows

Si vous utilisez Windows, les chemins de fichiers sont la plupart du temps sur undisque identifié par une lettre (c:) au début du chemin. Assurez-vous de bien mettre"file:" dans le chemin pour éviter des conflits d’espace de nommage et obtenir lesrésultats escomptés.

Exemple 15-8. utilisation de templates avec des chemins de fichiers Windows

// le script PHP$smarty->display("file:C:/export/templates/index.tpl");$smarty->display("file:F:/path/to/my/templates/menu.tpl");

{* le template Smarty *}{include file="file:D:/usr/local/share/templates/navigation.tpl"}

Templates depuis d’autres sources

Vous pouvez récupérer les templates à partir n’importe quelle source à laquelle vousavez accès avec PHP : base de données, sockets, LDAP et ainsi de suite. Il suffitd’écrire les fonctions de ressource plugins et de les enregistrer auprès de Smarty.

Reportez-vous à la section ressource plugins pour plus d’informations sur les fonc-tions que vous êtes censé fournir.

Note : Notez que vous ne pouvez pas écraser la ressource file native, toutefois, vouspouvez fournir une ressource qui récupère un template depuis le système de fichier parun autre moyen en l’enregistrant sous un autre nom de ressource.

Exemple 15-9. utilisation de ressources utilisateurs

// le script PHP

// mettez ces fonctions quelque part dans votre applicationfunction db_get_template ($tpl_name, &$tpl_source, &$smarty_obj){

// requête BD pour récupérer le template// et remplir $tpl_source$sql = new SQL;$sql->query("select tpl_source

from my_tablewhere tpl_name=’$tpl_name’");

if ($sql->num_rows) {$tpl_source = $sql->record[’tpl_source’];return true;

} else {return false;

}}

120

Page 129: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 15. Fonctionnalités avancées

function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj){

// requête BD pour remplir $tpl_timestamp$sql = new SQL;$sql->query("select tpl_timestamp

from my_tablewhere tpl_name=’$tpl_name’");

if ($sql->num_rows) {$tpl_timestamp = $sql->record[’tpl_timestamp’];return true;

} else {return false;

}}

function db_get_secure($tpl_name, &$smarty_obj){

// on suppose que tous les templates sont sûrsreturn true;

}

function db_get_trusted($tpl_name, &$smarty_obj){

// pas utilisée pour les templates dans notre cas}

// enregistre le nom de ressource "db"$smarty->register_resource("db", array("db_get_template",

"db_get_timestamp","db_get_secure","db_get_trusted"));

// utilise la ressource depuis le script PHP$smarty->display("db:index.tpl");

{* utilise la ressource depuis le template Smarty *}{include file="db:/extras/navigation.tpl"}

Fonction de gestion de template par défaut

Vous pouvez spécifier une fonction qui sera utilisée pour récupérer le contenu d’untemplate dans le cas où le template ne peut pas être récupéré depuis sa ressource.Une utilisation possible est la création de templates à la volée.

Exemple 15-10. utilisation de la fonction de gestion de template par défaut

<?php// mettez cette fonction quelque part dans votre application

function make_template ($resource_type, $resource_name, &$template_source, &$tem-plate_timestamp, &$smarty_obj){

if( $resource_type == ’file’ ) {if ( ! is_readable ( $resource_name )) {

// crée le fichier de template et renvoie le contenu$template_source = "This is a new template.";$template_timestamp = time();$smarty_obj->_write_file($resource_name,$template_source);return true;

}} else {

// pas un fichier

121

Page 130: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 15. Fonctionnalités avancées

return false;}

}

// régle la fonction par défaut$smarty->default_template_handler_func = ’make_template’;?>

122

Page 131: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 16. Etendre Smarty avec des plugins

La version 2.0 a introduit l’architecture de plugin qui est utilisée pour pratiquementtoute les fonctionnalités personnalisables de Smarty. Ceci comprend :

• les fonctions• les modificateurs• les fonctions de blocs• les fonctions de compilation• les filtres de pré-compilation• les filtres de post-compilation• les filtres de sorties• les ressources• les insertions

A part pour les ressources, la compatibilité avec les anciennes façons d’enregistrer lesfonctions de gestion avec l’API register_ est conservée. Si vous n’avez pas utilisé cetteAPI et que vous avez à la place directement modifié les variables de classes $cus-tom_funcs , $custom_mods et d’autres, vous devez alors modifier vos scripts pourutiliser l’API ou convertir vos fonctionnalités personnalisées en plugins.

Comment fonctionnent les pluginsLes plugins sont toujours chargés à la demande. Seuls les modificateurs de variables,les ressources, etc invoqués dans les scripts de templates seront chargés. De plus,chaque plugin n’est chargé qu’une fois, et ce même si vous avez plusieurs instancesde Smarty qui tournent dans la même requête.

Les filtres de post/pré-compilation et les filtres de sortie sont des cas un peu spéciaux.Comme ils ne sont pas mentionnés dans les templates, ils doivent être déclarés ouchargés explicitement via les fonctions de l’API avant que le template ne soit exécuté.L’ordre dans lequel les filtres multiples d’un même type sont exécutés dépend del’ordre dans lequel ils sont enregistrés ou chargés.

Il n’existe qu’un seul répertoire de plugin (pour des raisons de performances). Pourinstaller un plugin, copiez-le simplement dans le répertoire et Smarty l’utilisera au-tomatiquement.

Conventions de nommageLes fichiers et les fonctions de plugins doivent suivre une convention de nommagetrès spécifique pour être localisés par Smarty.

Les fichiers de plugins doivent être nommés de la façon suivante :

type . nom.php

Où type est l’une des valeurs suivantes :

• function• modifier• block• compiler• prefilter• postfilter• outputfilter• resource• insert

123

Page 132: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 16. Etendre Smarty avec des plugins

Et nomdoit être un identifiant valide (lettres, nombres et underscore seulement).

Quelques exemples : function.html_select_date.php , resource.db.php , modi-fier.spacify.php .

Les fonctions de plugins dans les fichiers de plugins doivent être nommées de lafaçon suivante :

smarty_ type _nom

Les significations de type et de nomsont les mêmes que précédemment.

Smarty donnera des messages d’erreur approprié si le fichier de plugin n’est pastrouvé, ou si le fichier ou la fonction de plugin ne sont pas nommés correctement.

Ecrire des pluginsLes plugins peuvent être soit chargés automatiquement par Smarty depuis le systèmede fichier, soit être déclarés pendant l’exécution via une fonction register_* de l’API.Ils peuvent aussi être désalloués en utilisant une fonction unregister_* de l’API.

Pour les plugins qui ne sont pas enregistrés pendant l’exécution, le nom des fonctionsn’ont pas à suivre la convention de nommage.

Si certaines fonctionnalités d’un plugin dépendent d’un autre plugin (comme c’est lecas de certains plugins accompagnant Smarty), alors la manière appropriée de char-ger le plugin est la suivante :

require_once SMARTY_DIR . ’plugins/function.html_options.php’;

Une règle générale est que chaque objet Smarty est toujours passé au plugin en tantque dernier paramètre (à part pour les modificateurs).

Les fonctions de templates

void smarty_function_ name(array $params , object &$smarty );

Tous les attributs passés aux fonctions de template à partir du template sont contenusdans le tableau associatif $params . Vous pouvez accéder à ces valeurs soit directe-ment, par exemple $params[’start’] , soit en utilisant extract($params) pour lesimporter dans la table des symboles.

Le retour de la fonction sera substituée à la balise de fonction du template (fonctionfetch par exemple). Sinon, la fonction peut simplement accomplir une autre tâchesans sortie (la fonction assign par exemple)

Si la fonction a besoin d’assigner des variables aux templates ou d’utiliser d’autresfonctionnalités fournies par Smarty, elle peut recevoir un objet $smarty pour cela.

Référez-vous aussi à : register_function(), unregister_function().

Exemple 16-1. fonction de plugin avec sortie

<?php/*

* Smarty plugin* -------------------------------------------------------------

124

Page 133: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 16. Etendre Smarty avec des plugins

* Fichier : function.eightball.php* Type : fonction* Nom : eightball* Rôle : renvoie une phrase magique au hasard* -------------------------------------------------------------*/

function smarty_function_eightball($params, &$smarty){

$answers = array(’Yes’,’No’,’No way’,’Outlook not so good’,’Ask again soon’,’Maybe in your reality’);

$result = array_rand($answers);return $answers[$result];

}?>

peut être utilisée dans le template de la façon suivante :

Question: Will we ever have time travel?Answer: {eightball}.

Exemple 16-2. fonction de plugin sans sortie

<?php/*

* Smarty plugin* -------------------------------------------------------------* Fichier : function.assign.php* Type : fonction* Nom : assign* Purpose : assigne une valeur à une variable de template* -------------------------------------------------------------*/

function smarty_function_assign($params, &$smarty){

extract($params);

if (empty($var)) {$smarty->trigger_error("assign: missing ’var’ parameter");return;

}

if (!in_array(’value’, array_keys($params))) {$smarty->trigger_error("assign: missing ’value’ parameter");return;

}

$smarty->assign($var, $value);}?>

125

Page 134: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 16. Etendre Smarty avec des plugins

ModificateursLes modificateurs sont des petites fonctions appliquées à une variable de templateavant qu’elle ne soit affichée ou utilisée dans un autre contexte. Les modificateurspeuvent être chaînés entre eux.

mixed smarty_modifier_ name(mixed $value , [mixed $param1 , ...]);

Le premier paramètre passé au modificateur est la valeur sur laquelle le modificateurest supposé opérer. Les autres paramètres peuvent être optionnels, dépendant dequel genre d’opération doit être effectué.

Le modificateur doit retourner le résultat de son exécution.

Regardez aussi register_modifier(), unregister_modifier().

Exemple 16-3. plugin modificateur simple

Ce plugin est un alias d’une fonction PHP. Il n’a aucun paramètre supplémentaires.<?php/*

* Smarty plugin* -------------------------------------------------------------* Fichier : modifier.capitalize.php* Type : modificateur* Name : capitalize* Rôle : met une majuscule aux mots d’une phrase* -------------------------------------------------------------*/

function smarty_modifier_capitalize($string){

return ucwords($string);}?>

Exemple 16-4. un plugin modificateur un peu plus complexe

<?php/*

* Smarty plugin* -------------------------------------------------------------* Fichier : modifier.truncate.php* Type : modificateur* Name : truncate* Rôle : Tronque une chaîne à une certaine longueur si* nécessaire, la coupe optionnellement au milieu* d’un mot et ajoute la chaîne $etc* -------------------------------------------------------------*/

function smarty_modifier_truncate($string, $length = 80, $etc = ’...’,$break_words = false)

{if ($length == 0)

return ”;

if (strlen($string) > $length) {$length -= strlen($etc);$fragment = substr($string, 0, $length+1);if ($break_words)

$fragment = substr($fragment, 0, -1);else

126

Page 135: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 16. Etendre Smarty avec des plugins

$fragment = preg_replace(’/\s+(\S+)?$/’, ”, $fragment);return $fragment.$etc;

} elsereturn $string;

}?>

Fonctions de blocs

void smarty_block_ name(array $params , mixed $content , object&$smarty );

Les fonctions de blocs sont des fonctions de la forme {func} .. {/func}. En d’autresmots, elles englobent des blocs de template et opèrent sur les contenus de ces blocs.Les fonctions de blocs ont la priorité sur les fonctions utilisateurs de même nom, cequi signifie que vous ne pouvez avoir une fonction utilisateur {func} et une fonctionde bloc {func} .. {/func}.

L’implémentation de votre fonction est appelée deux fois par Smarty : une fois pourla balise ouvrante et une autre fois pour la balise fermante.

Seule la balise ouvrante d’une fonction de bloc peut avoir des attributs. Tous les attri-buts passés par le template aux fonctions de templates sont contenues dans le tableauassociatif $params . Vous pouvez accéder à ces valeurs soit directement, par exemple$params[’start’] , soit en utilisant extract($params) pour les importer dans latable des symboles. Votre fonction a aussi accès aux attributs de la balise ouvrantequand c’est la balise fermante qui est exécutée.

La valeur de la variable $content est différente selon si votre fonction est appeléepour la balise ouvrante ou la balise fermante. Si c’est pour la balise ouvrante, elle seraà null et si c’est la balise fermante elle sera égale au contenu du bloc de template.Notez que le bloc de template aura déjà été exécuté par Smarty, vous recevrez doncla sortie du template et non sa source.

Si vous imbriqué des fonctions de bloc, il est possible de connaître la fonction de blocparente grâce à la variable $smarty->_tag_stack . Faites un var_dump() dessus et lastructure devrait apparaître.

Regardez aussi : register_block(), unregister_block().

Exemple 16-5. fonction de bloc

<?php/*

* Smarty plugin* -------------------------------------------------------------* Fichier : block.translate.php* Type : bloc* Nom : translate* Rôle : traduire un bloc de texte* -------------------------------------------------------------*/

function smarty_block_translate($params, $content, &$smarty){

if ($content) {$lang = $params[’lang’];// fait une traduction de $contentecho $translation;

}}

127

Page 136: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 16. Etendre Smarty avec des plugins

Fonctions de compilationLes fonctions de compilation sont appelées durant la compilation du template. Ellessont utiles pour injecter du code PHP ou du contenu "statique variant avec le temps"(bandeau de pub par ex.). Si une fonction de compilation et une fonction personnali-sée ont le même nom, la fonction de compilation a priorité.

mixed smarty_compiler_ name(string $tag_arg , object &$smarty );

Les fonctions de compilation ont deux paramètres : une chaîne contenant la balise- en gros, tout, depuis le nom de la fonction jusqu’au délimiteur de fin - et l’objetSmarty. Elles sont censées retourner le code PHP qui doit être injecté dans le templatecompilé.

Regardez aussi register_compiler_function(), unregister_compiler_function().

Exemple 16-6. fonction de compilation simple

<?php/*

* Smarty plugin* -------------------------------------------------------------* Fichier : compiler.tplheader.php* Type : compilation* Nom : tplheader* Rôle : Renvoie l’en-tête contenant le nom du fichier* source et le temps de compilation.* -------------------------------------------------------------*/

function smarty_compiler_tplheader($tag_arg, &$smarty){

return "\necho ’" . $smarty- >_current_file . " compiled at " . date(’Y-m-d H:M’). "’;";}?>

Cette fonction peut-être appelé depuis le template comme suivant :{* cette fonction n’est executée que lors de la compilation *}{tplheader}

Le code PHP résultant dans les templates compilés ressemblerait à ça :<phpecho ’index.tpl compiled at 2002-02-20 20:02’;?>

filtres de pré-compilation/filtres de post-compilationLes filtres de pré-compilation et les filtres de post-compilation ont des concepts trèsproches. Ils différent dans leur exécution, plus précisément dans le moment où ilssont exécutés.

string smarty_prefilter_ name(string $source , object &$smarty );

Les filtres de pré-compilation sont utilisés pour transformer la source d’un templatejuste avant la compilation. Le premier paramètre passé à la fonction de filtre de pré-compilation est la source du template, éventuellement modifiée par d’autres filtre de

128

Page 137: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 16. Etendre Smarty avec des plugins

pré-compilations. Le plugin est supposé retourner la source modifiée. Notez que cettesource n’est sauvegardée nulle part, elle est seulement utilisé pour la compilation.

string smarty_postfilter_ name(string $compiled , object &$smarty );

Les filtres de post-compilation sont utilisés pour modifier la sortie du template (lecode PHP) juste après que la compilation a été faite mais juste avant que le templatene soit sauvegardé sur le système de fichiers. Le premier paramètre passé à la fonc-tion de filtre de post-compilation est le code du template compilé, éventuellementdéjà modifié par d’autres filtre de post-compilations. Le plugin est censé retourner laversion modifié du code.

Exemple 16-7. plugin de filtre de post-compilation

<?php/*

* Smarty plugin* -------------------------------------------------------------* Fichier : prefilter.pre01.php* Type : filtre de pré-compilation* Nom : pre01* Rôle : Passe les balises HTML en minuscules.* -------------------------------------------------------------*/function smarty_prefilter_pre01($source, &$smarty){

return preg_replace(’! <(\w+)[^ >]+ >!e’, ’strtolower("$1")’, $source);}

?>

Exemple 16-8. plugin de filtre de post-compilation

<?php/*

* Smarty plugin* -------------------------------------------------------------* Fichier : postfilter.post01.php* Type: filtre de post-compilation* Nom : post01* Rôle : Renvoie du code qui liste toutes les variables* du template.* -------------------------------------------------------------*/function smarty_postfilter_post01($compiled, &$smarty){

$compiled = " <pre >\n <?php print_r(\$this- >get_template_vars()); ? >\n </pre >" . $compiled;return $compiled;

}?>

Filtres de sortieLes plugins de filtres de sortie opèrent sur la sortie du template, après que le templatea été chargé et exécuté, mais avant que la sortie ne soit affichée.

string smarty_outputfilter_ name(string $template_output , object&$smarty );

129

Page 138: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 16. Etendre Smarty avec des plugins

Le premier paramètre passé à la fonction du filtre de sortie est la sortie du templatequi doit être modifiée et le second paramètre est l’instance de Smarty appelant leplugin. Le plugin est supposé faire un traitement et en retourner le résultat.

Exemple 16-9. plugin de filtre de sortie

/** Smarty plugin* -------------------------------------------------------------* Fichier : outputfilter.protect_email.php* Type : filtre de sortie* Nom : protect_email* Rôle: Convertie les @ en %40 pour protéger des* robots spammers.* -------------------------------------------------------------*/function smarty_outputfilter_protect_email($output, &$smarty){

return preg_replace(’!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!’,

’$1%40$2’, $output);}

RessourcesLes plugins ressources sont un moyen générique de fournir des sources de templatesou des composants de scripts PHP à Smarty. Quelques exemples de ressources : basesde données, LDAP, mémoire partagée, sockets, et ainsi de suite.

Il y au total 4 fonctions qui ont besoin d’être enregistrées pour chaque type de res-source. Chaque fonction reçoit le nom de la ressource demandée comme premierparamètre et l’objet Smarty comme dernier paramètre. Les autres paramètres dé-pendent de la fonction.

bool smarty_resource_ name_source (string $rsrc_name , string &$source ,object &$smarty );bool smarty_resource_ name_timestamp (string $rsrc_name , int &$timestamp ,object &$smarty );bool smarty_resource_ name_secure (string $rsrc_name , object &$smarty );bool smarty_resource_ name_trusted (string $rsrc_name , object &$smarty );

La première fonction est supposée récupérer la ressource. Son second paramètre estune variable passée par référence où le résultat doit être stocké. La fonction est sup-posée retourner true si elle réussi à récupérer la ressource et false sinon.

La seconde fonction est supposée récupérer la date de dernière modification de laressource demandée (comme un timestamp UNIX). Le second paramètre est une va-riable passée par référence dans laquelle la date doit être stockée. La fonction estsupposée renvoyer true si elle a réussi à récupérer la date et false sinon.

La troisième fonction est supposée retourner true ou false selon si la ressourcedemandée est sûre ou non. La fonction est utilisée seulement pour les ressourcestemplates mais doit tout de même être définie.

La quatrième fonction est supposée retourner true ou false selon si on peut faireconfiance ou non à la ressource demandée. Cette fonction est utilisée seulement pourles composants de scripts PHP demandés par les balises include_php ou insert ayantun attribut src . Quoiqu’il en soit, elle doit être définie pour les ressources templates.

130

Page 139: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 16. Etendre Smarty avec des plugins

Regardez aussi register_resource(), unregister_resource().

Exemple 16-10. resource plugin

<?php/*

* Smarty plugin* -------------------------------------------------------------* Fichier : resource.db.php* Type : ressource* Nom : db* Rôle : Récupère des templates depuis une base de données* -------------------------------------------------------------*/

function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty){

// fait des requêtes BD pour récupérer votre template// et remplir $tpl_source$sql = new SQL;$sql->query("select tpl_source

from my_tablewhere tpl_name=’$tpl_name’");

if ($sql->num_rows) {$tpl_source = $sql->record[’tpl_source’];return true;

} else {return false;

}}

function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty){

// fait des requêtes BD pour remplir $tpl_timestamp$sql = new SQL;$sql->query("select tpl_timestamp

from my_tablewhere tpl_name=’$tpl_name’");

if ($sql->num_rows) {$tpl_timestamp = $sql->record[’tpl_timestamp’];return true;

} else {return false;

}}

function smarty_resource_db_secure($tpl_name, &$smarty){

// suppose que tous les templates sont sûrsreturn true;

}

function smarty_resource_db_trusted($tpl_name, &$smarty){

// inutilisée pour les templates}?>

131

Page 140: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 16. Etendre Smarty avec des plugins

InsertionsLes plugins d’insertion sont utilisés pour implémenter les fonctions qui sont appeléespar les balises insert dans les templates.

string smarty_insert_ name(array $params , object &$smarty );

Le premier paramètre passé à la fonction est une tableau associatif d’attributs. Vouspouvez accéder à ces valeurs soit directement, par exemple $params[’start’] , soiten utilisant extract($params) pour les importer dans la table des symboles.

La fonction d’insertion est supposée retourner le résultat qui sera substitué à la baliseinsert dans le template.

Exemple 16-11. plugin d’insertion

<?php/*

* Smarty plugin* -------------------------------------------------------------* Fichier : insert.time.php* Type : temps* Nom : time* Rôle : Insert la date/heure courante conformément* au format* -------------------------------------------------------------*/

function smarty_insert_time($params, &$smarty){

if (empty($params[’format’])) {$smarty->trigger_error("insert time: missing ’format’ parameter");return;

}

$datetime = strftime($params[’format’]);return $datetime;

}?>

132

Page 141: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 17. Diagnostic des erreurs

Erreurs Smarty/PHPSmarty peut identifier de nombreuses erreurs comme des attributs de balises man-quants ou de noms de variables malformés. Dans ce cas-là, vous verrez apparaîtreune erreur semblable à :

Exemple 17-1. erreurs Smarty

Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - ’%blah’in /path/to/smarty/Smarty.class.php on line 1041

Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing sec-tion name

in /path/to/smarty/Smarty.class.php on line 1041

Smarty vous indique le nom du template, le numéro de la ligne et l’erreur. Après cela,vous pouvez connaître le numéro de ligne où il y a eu erreur dans la définition de laclasse Smarty.

Il y a certaines erreurs que Smarty ne peut pas détecter, comme les balises fermantesmanquantes. Ce type d’erreurs est la plupart du temps repéré dans la phase de com-pilation PHP du template compilé.

Exemple 17-2. erreur d’analyse PHP

Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75

Quand vous rencontrez une erreur d’analyse PHP, le numéro de la ligne indiquéest celui du fichier PHP compilé et non du template. Vous pouvez alors regarderle template et détecter l’erreur. Voici quelques erreurs fréquentes : balises fermantespour {if}{/if} ou {section}{/section} manquantes, ou syntaxe logique incorrecte dansune instruction {if}. Si vous ne trouvez pas l’erreur, vous devrez alors ouvrir le fichierPHP compilé et aller à la ligne correspondante pour trouver d’où vient l’erreur.

133

Page 142: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 17. Diagnostic des erreurs

134

Page 143: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 18. Trucs et astuces

Gestion des variables non-assignéesPeut-être voudrez-vous des fois afficher une valeur par défaut pour une variable quin’a pas été assignée, comme pour afficher "&nbsp;" afin que les couleurs de fonddes tableaux fonctionnent. Beaucoup utiliseraient une instruction {if} pour gérer ce-la, mais il existe un moyen plus facile dans Smarty, l’utilisation du modificateur devariable default.

Exemple 18-1. afficher &nbsp; quand une variable est vide

{* la méthode pas adaptée *}

{if $title eq ""}&nbsp;

{else}{$title}

{/if}

{* la bonne méthode *}

{$title|default:"&nbsp;"}

Gestion des variables par défautSi une variable est utilisée fréquemment dans vos templates, lui appliquer le modi-ficateur par défaut peut être un peu fastidieux. Vous pouvez remédier à cela en luiassignant une valeur par défaut avec la fonction assign.

Exemple 18-2. assigner une valeur par défaut à une variable de template

{* faites cela qq part en haut de votre template *}{assign var="title" value=$title|default:"no title"}

{* si $title est vide, il contiendra alors no "no title" *}{$title}

Passage du titre à un template d’en-têteQuand la majorité de vos templates utilisent les mêmes en-tête et pied-de-page, il estd’usage de les mettre dans leurs propres templates et de les inclure. Mais commentfaire si l’en-tête doit avoir un titre différent, selon la page d’où on vient ? Vous pouvezpasser le titre à l’en-tête quand il est inclus.

Exemple 18-3. passer le titre au template d’en-tête

mainpage.tpl------------

{include file="header.tpl" title="Main Page"}{* le corps du template va ici *}{include file="footer.tpl"}

archives.tpl

135

Page 144: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 18. Trucs et astuces

------------

{config_load file="archive_page.conf"}{include file="header.tpl" title=#archivePageTitle#}{* le corps du template va ici *}{include file="footer.tpl"}

header.tpl----------<HTML><HEAD><TITLE >{$title|default:"BC News"} </TITLE ></HEAD><BODY>

footer.tpl----------</BODY></HTML>

Quand la page principale est conçue, le titre "Main page" est passé à header.tpl et seradonc utilisé pour le titre. Quand la page d’archive est conçue, le titre sera "Archives".Notez que dans l’exemple des archives, on utilise le fichier archives_page.conf plutôtque des variables codées en dur. Remarquez aussi que "BC News" est affichée si lavariable $title n’est pas définie, grâce au modificateur de variable default.

DatesDe façon générale, essayez de toujours passer les dates à Smarty sous forme de ti-mestamp. Cela permet aux designers de templates d’utiliser date_format pour avoirun contrôle total sur le formatage des dates et de comparer facilement les dates entreelles.

NOTE : à partir Smarty 1.4.0, vous pouvez passer les dates à Smarty sous la forme detimestamps Unix ou MySQL, ou tout autre format de dates que comprend strtotime().

Exemple 18-4. utilisation de date_format

{$startDate|date_format}

OUTPUT:

Jan 4, 2001

{$startDate|date_format:"%Y/%m/%d"}

OUTPUT:

2001/01/04

{if $date1 < $date2}...

{/if}

En utilisant la fonction {html_select_date} dans un template, le programmeur veut engénéral convertir le résultat d’un formulaire en un timestamp. Voici une fonction quidevrait vous être utile.

136

Page 145: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 18. Trucs et astuces

Exemple 18-5. conversion des éléments date d’un formulaire en timestamp

// cela suppose que vos éléments de formulaire soient nommés// startDate_Day, startDate_Month, startDate_Year

$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);

function makeTimeStamp($year="",$month="",$day=""){

if(empty($year))$year = strftime("%Y");

if(empty($month))$month = strftime("%m");

if(empty($day))$day = strftime("%d");

return mktime(0,0,0,$month,$day,$year);}

WAP/WMLLes templates WAP/WML nécessitent un en-tête "Content-Type" qui doit être passéavec le template. Le moyen le plus facile de faire cela est d’écrire une fonction uti-lisateur qui écrit l’en-tête. Si vous utilisez le cache, cela ne fonctionnera pas. Nousutiliserons donc une balise d’insertion (rappelez-vous que les balises d’insertion nesont pas mises en cache !). Assurez-vous qu’aucune sortie rien n’est transmise au na-vigateur avant l’appel du template, sans quoi la modification de l’en-tête échouera.

Exemple 18-6. utilisation d’insert pour écrire un en-tête Content-Type WML

// assurez-vous que Apache est configuré pour les extensions .wml !// mettez cette fonction qq part dans votre applications// ou dans Smarty.addons.phpfunction insert_header() {

// cette fonction attend un argument $contentextract(func_get_arg(0));if(empty($content))

return;header($content);return;

}

// votre template Smarty DOIT commencer avec la balise d’insertion

<?xml version="1.0"? ><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml" >

<!-- begin new wml deck -- ><wml><!-- begin first card -- ><card ><do type="accept" ><go href="#two"/ ></do ><p>Welcome to WAP with Smarty!Press OK to continue...</p ></card ><!-- begin second card -- ><card id="two" ><p>Pretty easy isn’t it?

137

Page 146: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 18. Trucs et astuces

</p ></card ></wml >

Templates composantsCette astuce tient plus du hack qu’autre chose mais n’en demeure pas moins une idéeplutôt chouette. Utilisez-la à vos propres risques. ;-)

Traditionnellemnt, la programmation avec des templates dans les applications se dé-roule de la façon suivante : d’abord vous récupérez vos variables dans l’applicationPHP (peut-être avec des requêtes en base de données), puis vous instanciez votreobjet Smarty, assignez les variables et affichez le template. Disons par exemple quenous avons un téléscripteur dans notre template. Nous récupérerions les donnéesdans notre application, puis les assignerions ensuite pour les afficher. Mais ne serait-ce pas mieux de pouvoir ajouter ce téléscripteur à n’importe quelle application enincluant directement le template sans avoir à se soucier de la récupération des don-nées.

Vous pouvez intégrer du PHP dans vos templates avec les balises {php}{/php}. Aveccette méthode, vous pouvez inclure des templates complets, dans la mesure où ilsrécupèrent leurs propres données pour les assigner à leurs propres variables. Avecle traitement intégré de cette façon, vous pouvez garder le template et le traitementensemble. Ainsi, on ne se soucie plus d’où vient le contenu du template, tout vientcomme un seul et unique composant.

Exemple 18-7. template composant

{* Smarty *}

{php}

// notre fonction pour récupérer les donnéesfunction fetch_ticker($symbol,&$ticker_name,&$ticker_price) {

// du traitement qui récupère $ticker_name// $ticker_price

}

// appelle la fonctionfetch_ticker("YHOO",$ticker_name,$ticker_price);

// assigne les variables$this->assign("ticker_name",$ticker_name);$this->assign("ticker_price",$ticker_price);

{/php}

Stock Name: {$ticker_name} Stock Price: {$ticker_price}

A partir de Smarty 1.5.0, il y a même un moyen plus propre. Vous pouvez inclure duPHP dans votre template avec la balise {include_php ...}. De cette façon, vous pouvezgarder séparée la logique applicative de la logique de présentation. Reportez-vous àla fonction include_php pour plus d’informations.

Exemple 18-8. template composant avec include_php

load_ticker.php---------------

<?php// notre fonction pour récupérer les donnéesfunction fetch_ticker($symbol,&$ticker_name,&$ticker_price) {

138

Page 147: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 18. Trucs et astuces

// put logic here that fetches $ticker_name// and $ticker_price from some resource

}

// appelle la fonctionfetch_ticker("YHOO",$ticker_name,$ticker_price);

// assigne les variables$this->assign("ticker_name",$ticker_name);$this->assign("ticker_price",$ticker_price);

?>

index.tpl---------

{* Smarty *}

{include_php file="load_ticker.php"}

Stock Name: {$ticker_name} Stock Price: {$ticker_price}

Dissimuler les adresses emailVous-êtes vous déjà demandé pourquoi vos adresses emails sont sur autant de mai-ling listes de spam ? Une façon pour les spammers de récupérer les adresses est deparcourir les pages Web. Voici une façon de remédier à ce problème : mettre votreadresse email dans du Javascript brouillé au milieu de votre source HTML, sans quecela ne gêne l’affichage sur le navigateur Web. Cela est fait grâce au plugin mailto.

Exemple 18-9. exemple de dissimulation d’une adresse email

index.tpl---------

Send inquiries to{mailto address=$EmailAddress encode="javascript" subject="Hello"}

Note technique : Cette méthode n’est pas infaillible. Un spammer peut programmer soncollecteur d’email pour passer outre cette astuce, mais c’est cependant peu probable.

139

Page 148: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 18. Trucs et astuces

140

Page 149: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 19. Ressources

La page Web de Smarty se trouve à l’adresse suivante : http://smarty.php.net/.Vous pouvez souscrire à la mailing liste en envoyant un email à [email protected]. Les archives de la mailing list se trouvent à l’adresse sui-vante : http://marc.theaimsgroup.com/?l=smarty&r=1&w=2

141

Page 150: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 19. Ressources

142

Page 151: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 20. BUGS

Vérifiez le fichier de BUGS fourni avec la dernière version de Smarty ou consultez lesite Web.

143

Page 152: Smarty - le moteur et compilateur de template PHP · Smarty - le moteur et compilateur de template PHP Monte Ohrt  Andrei Zmievski  Arnaud

Chapitre 20. BUGS

144