Smarty pour les programmeurs Constantes SMARTY_DIR Il doit s'agir du chemin complet du rTpertoire oś se trouvent les fichiers classes de Smarty. S'il n'est pas dTfini, Smarty essaiera alors d'en dTterminer automatiquement la valeur. S'il est dTfini, le chemin doit se terminer par un slash. SMARTY_DIR // dTfinit le chemin du rTpertoire de Smarty define("SMARTY_DIR","/usr/local/lib/php/Smarty/"); require_once(SMARTY_DIR."Smarty.class.php"); Variables $template_dir C'est le nom par dTfaut du rTpertoire des templates. Si vous ne spTcifiez aucun chemin lors de l'utilisation de templates, Smarty les cherchera a cet emplacement. Par dTfaut, il s'agit de "./templates", ce qui signifie qu'il va chercher le rTpertoire templates dans le rTpertoire oś se trouve le script PHP en cours d'exTcution. Note technique Il n'est pas conseillT de mettre ce rTpertoire dans l'arborescence Web. $compile_dir C'est le nom du rTpertoire oś se trouvent les templates compilTs. Par dTfaut, il s'agit de "./templates_c", ce qui signifie que Smarty va chercher ce rTpertoire dans le mOme rTpertoire que le script PHP en cours d'exTcution. Note technique Ce rTglage doit Otre soit un chemin absolu, soit un chemin relatif. include_path n'est pas utilisT pour Tcrire des fichiers. Note technique Il n'est pas conseillT de mettre ce rTpertoire sous la racine de l'arborescence Web. $config_dir Il s'agit du rTpertoire utilisT pour stocker les fichiers de configuration utilisTs dans les templates. La valeur par dTfaut est "./configs", ce qui signifie que Smarty va chercher ce rTpertoire dans le mOme rTpertoire que le script PHP qui s'exTcute. Note technique Il n'est pas conseillT de mettre ce rTpertoire sous la racine de l'arborescence Web. $plugins_dir Ce sont les rTpertoire dans lesquels Smarty ira chercher les plugins dont il a besoin. La valeur par dTfaut est "plugins" sous le rTpertoire SMARTY_DIR. Si vous donnez un chemin relatif, Smarty regardera d'abord relativement au SMARTY_DIR, puis relativement au rtc (rTpertoire de travail courant), puis relativement a chaque entrTe de votre rTpertoire d'inclusion PHP. Note technique Pour des raisons de performances, ne rTglez pas votre plugins_dir pour qu'il utilise votre include_path PHP. Utilisez un chemin absolu ou un chemin relatif a SMARTY_DIR ou au rtc. $debugging Cela active la console de dTbogage. La console est une fenOtre javascript qui vous informe des templates inclus et des variables assignTes dans la page courante. $debug_tpl C'est le nom du fichier template utilisT pour la console de dTbuggage. Par dTfaut debug.tpl, il se situe dans SMARTY_DIR $debugging_ctrl Cela permet d'avoir diffTrents moyens pour activer le dTbogage. URL signifie que si SMARTY_DEBUG se trouve dans QUERY_STRING, le dTbuggage est activT a l'invocation du script. Si $debugging est a vrai, cette valeur est sans effet. $global_assign C'est une liste de variable qui sont toujours implicitement assignTes au moteur de templates. Ceci est commode pour rendre des variables globales ou des variables du serveur accessibles a tous les templates plut(t que de devoir les assigner a la main. Chaque TlTment de $global_assign doit Otre soit le nom de la variable globale, soit une paire clef/valeur, oś clef est le nom du tableau global et valeur le tableau de variable assignTes depuis ce tableau global. $SCRIPT_NAME est globalement assignT par dTfaut depuis $HTTP_SERVER_VARS. Note technique On peut accTder aux variables du serveur avec la variable $smarty, par exemple {$smarty.server.SCRIPT_NAME}. Se reporter a la section sur la variable $smarty. $undefined Cela rFgle la valeur de $undefined, null par dTfaut. N'est actuellement utilisT que pour initialiser des variables non-dTfinies dans $global_assign a des valeurs par dTfaut. $autoload_filters Si vous dTsirez charger des filtres a chaque invocation de templates, vous pouvez le spTcifier en utilisant cette variable. Les types de filtres et les valeurs sont des tableaux comportant le nom des filtres. $smarty->autoload_filters = array('pre' => array('trim', 'stamp'), 'output' => array('convert')); $compile_check A chaque invocation de l'application PHP, Smarty fait un test pour voir si le template courant a TtT modifiT (date de derniFre modification diffTrente) depuis sa derniFre compilation. S'il a changT, le template est recompilT. Si le template n'a pas encore TtT compilT, il le sera quelle que soit la valeur ce rTglage. Par dTfaut cette valeur est a vrai. Quand une application est mise en production (les templates ne changent plus), cette vTrification n'est pas nTcessaire. Assurez-vous de mettre $compile_check a "false" pour des performances maximales. Notez que si vous mettez ce paramFtre a "false" et qu'un template est modifiT, vous ne verrez *pas* le changement car le template ne sera *pas* recompilT. Si le processus de cache est activT et que $compile_check l'est aussi, alors les fichiers du cache seront regTnTrTs si un template concernT ou un fichier de configuration concernT est modifiT. Voir aussi $force_compile ou clear_compiled_tpl. $force_compile Cela oblige Smarty a (re)compiler les templates a chaque invocation. Ce rTglage supplante $compile_check. Par dTfaut, il est dTsactivT. Ceci est commode pour le dTveloppement et le dTbogage mais ne devrait jamais Otre utilisT dans un environnment de production. Si le systFme de cache est actif, les fichiers du cache seront regTnTrTs a chaque appel. $caching Ce paramFtre demande a Smarty de mettre ou non en cache la sortie des templates. Par dTfaut ce rTglage est a 0 (dTsactivT). Si vos templates gTnFrent du contenu redondant, il est conseillT d'activer le cache. Cela permettra un gain de performance consTquent. Vous pouvez aussi avoir de nombreux fichiers de cache pour un mOme template. Une valeur de 1 ou 2 active le cache. 1 indique a Smarty d'utiliser la variable $cache_lifetime pour dTterminer si le fichier de cache a expirT. Une valeur de 2 indique a Smarty d'utiliser la valeur $cache_lifetime spTcifiTe a la gTnTration du cache. Ainsi vous pouvez rTgler la durTe de vie d'un fichier de cache avant de rTcupTrer 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 regTnTrT si un des templates ou un des fichiers de configuration qui fait partie de ce fichier de cache a TtT modifiT. Si $force_compile est actif, le contenu du cache est toujours regTnTrT. $cache_dir Il s'agit du nom du rTpertoire oś les caches des templates sont stockTs. Par dTfaut il s'agit de "./cache", ce qui signifie que Smarty va chercher ce rTpertoire dans le mOme rTpertoire que le script PHP en cours d'exTcution. Note technique Ce rTglage doit Otre soit un chemin absolu, soit un chemin relatif. include_path n'a aucune influence lors de l'Tcriture des fichiers. Technical Note Il n'est pas conseillT de mettre ce rTpertoire dans l'arborescence Web. $cache_lifetime Il s'agit de la durTe en secondes pendant laquelle un cache de template est valide. Une fois cette durTe dTpassTe, le cache est regTnTrT. $caching doit Otre a "true" pour que $cache_lifetime ait une quelconque utilitT. Avec une valeur de -1, le cache n'expire jamais. Avec une valeur de 0, le cache est toujours regTnTrT (utile a des fins de tests seulement. Une meilleure faton de dTsactiver le cache est de mettre $caching a "false"). Si $force_compile est activT, les fichiers du cache seront regTnTrTs a chaque fois, dTsactivant ainsi le cache. Vous pouvez effacer tous les fichiers du cache avec la function clear_all_cache() ou de faton individuelle (ou groupTe) avec la fonction clear_cache(). Note technique Si vous souhaitez donner a certains templates leur propre durTe de vie en cache, vous pouvez le faire en rTglant $caching a 2, puis $cache_lifetime a une unique valeur juste avant d'appeler display ou fetch(). $cache_handler_func Vous pouvez utiliser votre propre fonction de gestion du cache plut(t que d'utiliser celle livrTe avec Smarty. RTfTrez-vous a la section sur la fonction de gestion de cache personnalisTe pour plus de dTtails. $cache_modified_check Si cette variable est a vrai, Smarty respectera l'en-tOte If-Modified-Since envoyT par le client. Si la date de derniFre modification du fichier de cache n'a pas changT depuis la derniFre visite, alors un en-tOte "304 Not Modified" sera envoyT a la place du contenu. Cela ne fonctionne qu'avec du contenu mis en cache hors de la balise insert. $config_overwrite Si cette variable est a vrai, les variables lues dans les fichiers de configuration peuvent s'Tcraser entre elles. Sinon les variables seront mises dans un tableau. TrFs utile si vous voulez stocker des tableaux de donnTes dans des fichiers de configuration, listez simplement chaque TlTment plusieurs fois. Mise a faux par dTfaut. $config_booleanize Si cette variable est a vrai, les valeurs on/true/yes et off/false/no dans les fichiers de configuration sont automitiquement converties en boolTen. De cette faton vous pouvez utiliser ces valeurs dans le template de la faton suivante : {if #foobar#} ... {/if}. Si foobar est a on, true ou yes, l'instruction {if} sera exTcutTe. vrai par dTfaut. $config_read_hidden Si cette variable est a vrai, les sections cachTs (dont les noms commencent par un point) dans les fichiers de configuration peuvent Otre lues depuis les templates. On laisse habituellement cela a faux, de cette faton vous pouvez stocker des donnTes sensibles dans les fichiers de configuration, comme par exemple des paramFtres de base de donnTes, sans vous soucier de la faton dont les templates les chargent. Mise a faux par dTfaut. $config_fix_newlines Si cette variable est mise a vrai, les caractFres de nouvelles lignes mac et dos (\r et \r\n) sont convertis en \n quand ils sont analysTs. vrai par dTfaut. $default_template_handler_func Cette fonction est appelTe quand un template ne peut pas Otre obtenu avec sa ressource. $php_handling Indique a Smarty comment interprTter le code PHP intTgrT dans les templates. Il y a quatre valeurs possibles, par dTfaut SMARTY_PHP_PASSTHRU. Notez que cela n'affecte PAS le code PHP entourT des balises {php}{/php} dans le template. SMARTY_PHP_PASSTHRU - Smarty Tcrit les balises telles quelles. SMARTY_PHP_QUOTE - Smarty transforme les balises en entitTs HTML. SMARTY_PHP_REMOVE - Smarty supprime les balises des templates. SMARTY_PHP_ALLOW - Smarty exTcute les balises comme du code PHP. NOTE : IntTgrer du code PHP dans les templates est vivement dTconseillT. PrTfTrez les fonctions utilisateurs ou les modificateurs de variables. $security Cette variable est a faux par dTfaut. $security est de rigueur quand vous n'Otes pas complFtement svr des personnes qui Tditent les templates (par ftp par exemple) et que vous voulez rTduire le risque que la sTcuritT du systFme soit compromise par le language de template. Activer cette option de sTcuritT applique les rFgles suivantes au langage de template, a moins que $security_settings ne spTcifie le contraire : Si $php_handling est rTglTe a SMARTY_PHP_ALLOW, cela est implicitement changT a SMARTY_PHP_PASSTHRU. Les fonctions PHP ne sont pas autorisTes dans les instructions IF, a part celles dTclarTes dans $security_settings. Les templates ne peuvent Otre inclus que depuis des rTpertoires listTs dans le tableau $security_dir. Les fichiers locaux ne peuvent Otre rTcupTrTs que depuis les rTpertoires listTs dans le tableau $security_dir en utilisant {fetch}. Les balises {php}{/php} ne sont pas autorisTes. Les fonctions PHP ne sont pas autorisTes en tant modificateurs, a part celles spTcifiTes dans $security_settings. $secure_dir Il s'agit d'un tableau contenant tous les rTpertoires locaux qui sont considTrTs comme sTcurisTs. {include} et {fetch} l'utilisent quand la sTcuritT est activTe. $security_settings Ces rTglages servent a Tcraser ou spTcifier les paramFtres de sTcuritT quand celle-ci est activTe. Les rTglages possibles sont les suivants : PHP_HANDLING - true/false. Si vrai, le rTglage $php_handling n'est pas vTrifiT. IF_FUNCS - Le tableau des noms de fonctions PHP autorisTes dans les intructions IF. INCLUDE_ANY - true/false. Si vrai, les templates peuvent Otre inclus de n'importe oś, quelque soit le contenu de $secure_dir. PHP_TAGS - true/false. Si vrai, les balises {php}{/php} sont autorisTes dans les templates. MODIFIER_FUNCS - Le tableau des noms de fonctions autorisTes a Otre utilisTes comme modificateurs de variables. $trusted_dir $trusted_dir n'est utilisTe lorsque $security est activTe. C'est un tableau de tous les rTpertoires qui peuvent Otre considTrTs comme svrs. Les rTpertoires svrs sont ceux qui contiennent des scripts PHP qui sont exTcutTs directement depuis les templates avec {include_php}. $left_delimiter Il s'agit du dTlimiteur gauche utilisT par le moteur de templates. La valeur par dTfaut est "{". $right_delimiter Il s'agit du dTlimiteur droit utilisT par le moteur de templates. La valeur par dTfaut est "}". $compiler_class SpTcifie le nom de la classe du compilateur qui va Otre utilisTe pour compiler les templates. Le compilateur par dTfaut est 'Smarty_Compiler'. RTservT aux utilisateurs avancTs. $request_vars_order L'ordre dans lequel les variables de requOtes sont enregistrTes, identique a variables_order dans php.ini. $compile_id Identifiant persistant du compilateur. On peut passer le mOme compile_id a chaque appel de fonction mais une alternative consiste a rTgler ce compile_id, qui sera utilisT implicitement. $use_sub_dirs RTgler cela a faux si votre environnement PHP n'autorise pas Smarty a crTer des sous-rTpertoires. Les sous-rTpertoires sont efficaces, utilisez-les quand vous le pouvez. $default_modifiers Il s'agit d'un tableau de modificateurs utilisT pour assigner une valeur par dTfaut a chaque variable dans un template. Par exemple, pour par dTfaut Tchapper les caractFres HTML de chaque variable, utilisez array('escape:"htmlall"'); Pour rendre une variable indTpendante des modificateurs par dTfaut, passez-lui en paramFtre le modificateur "nodefaults" : {$var|nodefaults}. MTthodes append void append mixed var void append string varname mixed var void append string varname mixed var boolean merge UtilisTe pour ajouter un TlTment a un tableau assignT. Si vous utilisez cette fonction avec une chaene de caractFre, elle est convertie en tableau auquel on ajoute ensuite l'TlTment. Vous pouvez explicitement passer des paires nom/valeur. Si vous passez le troisiFme paramFtre (optionel) a vrai, la valeur sera fusionnTe avec le tableau plut(t que d'Otre ajoutTe. Note technique Le paramFtre de fusion respecte les clTs des tableaux, ainsi si vous fusionnez deux tableaux indexTs numTriquement, ils pourront s'Tcraser l'un l'autre ou donner des clTs qui ne se suivent pas. Cela diffFre donc de la fonction PHP array_merge() qui supprime les clTs numTriques et les renumTrote. 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 UtilisTe pour ajouter des valeurs a un template par rTfTrence plut(t que par copie. Si vous ajoutez une variable par rTfTrence puis changez sa valeur, le changement est aussi rTpercutT sur la valeur assignTe. Pour les objets, append_by_ref ne fait pas de copie en mTmoire de l'objet assignT. Voir la documentation PHP pour plus d'informations sur les rTfTrences de variable. Si vous passez le troisiFme paramFtre a vrai, la valeur sera fusionnTe avec le tableau courant plut(t que d'Otre ajoutTe. Note technique Le paramFtre de fusion respecte les clTs des tableaux, ainsi si vous fusionnez deux tableaux indexTs numTriquement, ils pourront s'Tcraser l'un l'autre ou donner des clTs qui ne se suivent pas. Cela diffFre donc de la fonction PHP array_merge() qui supprime les clTs numTriques et les renumTrote. 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 UtilisTe pour assigner des valeurs aux templates. Vous pouvez explicitement passer des paires nom/valeur, ou des tableaux associatifs contenant des paires nom/valeur. 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 UtilisTe pour assigner des valeurs aux templates par rTfTrence plut(t que par copie. RTfTrez-vous au manuel PHP pour une explication plus prTcise sur les rTfTrences des variables. Note technique Si vous assignez une variable par rTfTrence puis changez sa valeur, le changement est aussi rTpercutT sur la valeur assignTe. Pour les objets, assign_by_ref ne fait pas de copie en mTmoire de l'objet assignT. RTfTrez-vous au manuel PHP pour une explication plus prTcise sur les rTfTrences de variable. 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 UtilisTe pour effacer les valeurs de toutes les variables assignTes. clear_all_assign // efface toutes les variables assignTes $smarty->clear_all_assign(); clear_all_cache void clear_all_cache int expire time UtilisTe pour effacer les fichiers de cache des templates. Vous pouvez passer un paramFtre optionnel afin d'indiquer l'Gge minimun que doivent avoir les fichiers de cache pour qu'ils soient effacTs. clear_all_cache // efface le cache $smarty->clear_all_cache(); clear_assign void clear_assign string var Efface la valeur d'une variable assignTe. Il peut s'agir d'une simple valeur ou d'un tableau de valeur. 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 compile id int expire time UtilisTe pour nettoyer le(s) fichier(s) de cache d'un template en particulier. Si vous avez plusieurs fichiers de cache pour ce template vous pouvez en spTcifier un en particulier en passant son identifiant en deuxiFme paramFtre. Vous pouvez aussi passer un identifiant de compilation en troisiFme paramFtre. Vous pouvez grouper des templates ensemble afin qu'ils puissent Otre supprimTs en groupe. RTfTrez-vous a la section sur le cache pour plus d'informations. Vous pouvez passer un quatriFme paramFtre pour indiquer un Gge minimum en secondes que le fichier en cache doit avoir avant d'Otre effacT. clear_cache // efface le fichier de cache de ce template $smarty->clear_cache("index.tpl"); // efface un fichier de cache grGce a son identifiant de cache $smarty->clear_cache("index.tpl","CACHEID"); clear_compiled_tpl void clear_compiled_tpl string tpl_file UtilisTe pour effacer la version compilTe du template spTcifiT ou de tous les templates si aucun n'est spTcifiT. Cette fonction est destinTe a un usage avancT et n'est pas habituellement utilisTe. clear_compiled_tpl // efface la version compilTe du template spTcifiT $smarty->clear_compiled_tpl("index.tpl"); // efface tout le contenu du rTpertoire des templates compilTs $smarty->clear_compiled_tpl(); clear_config void clear_config string var UtilisTe pour effacer toutes les variables de configuration s'Ttant vues assigner une valeur. Si une variable est spTcifiTe, seule cette variable est effacTe. clear_config // efface toutes les variables de configuration assignTes $smarty->clear_config(); // efface une seule variable $smarty->clear_config('foobar'); config_load void config_load string file string section UtilisTe pour charger des donnTes d'un fichier de config et les assigner a un template. Cette fonction fonctionne exactement comme la fonction de template config_load. Note technique Comme pour Smarty 2.4.0, les variables de templates assignTes sont conservTes entre chaque appel a fetch et display. Les variables de configuration chargTes avec config_load sont globales. Les fichiers de config sont aussi compilTs pour une exTcution plus rapide et respecte les rTglages de force_compile et de compile_check. 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 UtilisTe pour afficher un template. Il faut fournir un type et un chemin de ressource template valides. Vous pouvez passer en second paramFtre un identifiant de fichier de cache. Reportez-vous a la section cache pour plus de renseignements. Le troisiFme paramFtre optionnel est un identifiant de compilation. Cela s'avFre utile quand vous voulez compiler diffTrentes versions d'un mOme template, pour par exemple avoir des templates compilTs sTparTs pour diffTrents langages. Une autre utilitT de ce paramFtre est le cas oś vous utilisez plus d'un $template_dir mais un seul $compile_dir, car certains templates avec le mOme nom s'Tcraseraient entre eux. Vous pouvez aussi rTgler la variable $compile_id une seule fois au lieu de la passer a chaque appel. affichage include("Smarty.class.php"); $smarty = new Smarty; $smarty->caching = true; // ne fait un appel a la base de donnTes que si le fichier // de cache n'existe pas if(!$smarty->is_cached("index.tpl")) { // quelques donnTes $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"); Utilisez la syntaxe des ressources templates pour afficher des fichiers en-dehors du rTpertoire $template_dir 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 prTfixe "file:") $smarty->display("file:C:/www/pub/templates/header.tpl"); // inclue a partir de la ressource template "db" $smarty->display("db:header.tpl"); fetch string fetch string template string cache_id string compile_id UtilisTe pour renvoyer le rTsultat du template plut(t que de l'afficher. Il faut passer un type et un chemin de ressource template valides. Vous pouvez passer un identifiant de cache en deuxiFme paramFtre. Reportez-vous a la section cache pour plus de renseignements. Un troisiFme paramFtre optionnel est un identifiant de compilation. Cela s'avFre utile quand vous voulez compiler diffTrentes versions d'un mOme template, pour par exemple avoir des templates compilTs sTparTs pour diffTrents langages. Une autre utilitT de ce paramFtre est le cas oś vous utilisez plus d'un $template_dir mais un seul $compile_dir, car certains templates avec le mOme nom s'Tcraseraient entre eux. Vous pouvez aussi rTgler la variable $compile_id une seule fois plut(t que de la passer a chaque appel. fetch include("Smarty.class.php"); $smarty = new Smarty; $smarty->caching = true; // ne fait un appel a la base de donnTes que si le fichier // de cache n'existe pas if(!$smarty->is_cached("index.tpl")) { // quelques donnTes $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); } // rTcupFre le rTsultat $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 passTe en paramFtre. Si aucun paramFtre n'est donnT, un tableau de toutes les variables de configuration chargTes est renvoyT. get_config_vars // rTcupFre la variable de configuration chargTe 'foo' $foo = $smarty->get_config_vars('foo'); // rTcupFre toutes les variables de configuration chargTes $config_vars = $smarty->get_config_vars(); // les affiche a l'Tcran print_r($config_vars); get_registered_object array get_registered_object string object_name Retourne la rTfTrence d'un objet enregistrT. Utile quand vous voulez accTder directement a un objet enregistrT avec une fonction utilisateur. get_registered_object function smarty_block_foo($params, &$smarty) { if (isset[$params['object']]) { // rTcupFre la rTfTrence de l'objet enregistrT $obj_ref =& $smarty->get_registered_object($params['object']); // $obj_ref est maintenant une rTfTrence vers l'objet } } get_template_vars array get_template_vars string varname Retourne la valeur assignTe passTe en paramFtre. Si aucun paramFtre n'est donnT, un tableau de toutes les variables assignTes est renvoyT. get_template_vars // rTcupFre la variable 'foo' assignTe au template // get assigned template var 'foo' $foo = $smarty->get_template_vars('foo'); // rTcupFre toutes les variables assignTes a ce template $tpl_vars = $smarty->get_template_vars(); // les affiche a l'Tcran print_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 fonctionne seulement si caching est a vrai. is_cached $smarty->caching = true; if(!$smarty->is_cached("index.tpl")) { // faire des requOtes base de donnTes et assigner // des variables ici. } $smarty->display("index.tpl"); Vous pouvez aussi passer en second paramFtre un identifiant de cache au cas oś vous voudriez plusieurs fichiers de cache pour ce template. is_cached with multiple-cache template $smarty->caching = true; if(!$smarty->is_cached("index.tpl","FrontPage")) { // faire des requOtes base de donnTes et assigner // des variables ici. } $smarty->display("index.tpl","FrontPage"); load_filter void load_filter string type string name Cette fonction peut Otre utilisTe pour charger un plugin de filtrage. Le premier argument spTcifie le type du filtre et peut prendre l'une des valeurs suivantes : 'pre', 'post' ou 'output'. Le second argument spTcifie le nom du plugin de filtrage, par exemple 'trim'. 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' appelT 'datefooter' $smarty->load_filter('output', 'compress'); // charge le filtre 'compress' de type 'output' register_block void register_block string name string impl UtilisTe pour dTclarrer dynamiquement des plugins de fonction de blocs. Il faut passer en paramFtre le nom de la fonction de blocs, suivi du nom de la fonction PHP qui l'implTmente. 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 $content echo $translation; } } {* template *} {translate lang="br"} Hello, world! {/translate} register_compiler_function void register_compiler_function string name string impl UtilisTe pour dTclarer dynamiquement un plugin de fonction de compilation. Il faut passer en paramFtres le nom de la fonction de compilation, suivi par la fonction PHP qui l'implTmente. register_function void register_function string name string impl UtilisTe pour dTclarer dynamiquement des plugins de fonction de templates. Il faut passer en paramFtres le nom de la fonction de templates, suivi par le nom de la fonction PHP qui l'implTmente. 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 UtilisTe pour dTclarer dynamiquement un plugin de modificateur. Il faut passer en paramFtre le nom du modificateur de variables, suivi de la fonction PHP qui l'implTmente. register_modifier // associons la fonction PHP stripslashes a un modificateur Smarty. $smarty->register_modifier("sslash","stripslashes"); // vous pouvez maintenant utiliser {$var|sslash} pour supprimer les slash des variables register_object void register_object string object_name object $object array allowed methods/properties boolean format UtilisTe pour enregistrer un objet a utiliser dans un template. Reportez-vous a la section objet de ce manuel pour des exemples. register_outputfilter void register_outputfilter string function_name UtilisTe pour dTclarer dynamiquement des filtres de sortie, pour agir sur la sortie d'un template avant qu'elle ne soit affichTe. Reportez-vous a la section filtres de sortie pour plus d'information sur le sujet. register_postfilter void register_postfilter string function_name UtilisTe pour dTclarer dynamiquement des filtres de post-compilation pour y faire passer des templates une fois qu'ils ont TtT compilTs. Reportez-vous a la section filtres de post-compilation de templates pour avoir plus de renseignements sur la faton de paramTtrer les fonctions de post-compilation. register_prefilter void register_prefilter string function_name UtilisTe pour dTclarer dynamiquement des filtres de prT-compilation pour y faire passer des templates avant qu'ils ne soient compilTs. Reportez-vous a la section filtres de prT-compilation de templates pour avoir plus de renseignements sur la faton de paramTtrer les fonctions de prT-compilation. register_resource void register_resource string name array resource_funcs UtilisTe pour dTclarer dynamiquement une ressource plugin dans Smarty. Il faut passer en paramFtre le nom de la ressource et le tableau des fonctions PHP qui l'implTmentent. Reportez-vous a la section ressources templates pour avoir plus d'informations sur la faton de paramTtrer une fonction rTcupTrant des templates. 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-Otre utilisTe pour afficher un message d'erreur en utilisant Smarty. Le paramFtre level peut prendre l'une des valeures utilisTes par la fonction PHP trigger_error, i.e. E_USER_NOTICE, E_USER_WARNING, etc. Par dTfaut il s'agit de E_USER_WARNING. template_exists bool template_exists string template Cette fonction vTrifie si le template spTcifiT existe. Elle accepte soit un chemin vers le template, soit une ressource de type chaene de caractFres prTcisant le nom du template. unregister_block void unregister_block string name UtilisTe pour dTsallouer dynamiquement un plugin de fonction de blocs. Passez en paramFtre le nom du bloc. unregister_compiler_function void unregister_compiler_function string name UtilisTe pour dTsallouer dynamiquement un fonction de compilation. Passez en paramFtre le nom de la fonction de compilation. unregister_function void unregister_function string name UtilisTe pour dTsallouer dynamiquement un plugin de fonction de templates. Passez en paramFtres le nom de la fonction de templates. unregister_function // nous ne voulons pas que les designers de templates aient accFs // au systFme de fichiers. $smarty->unregister_function("fetch"); unregister_modifier void unregister_modifier string name UtilisTe pour dTsallouer dynamiquement un plugin modificateur de variable. Passez en paramFtre le nom du modificateur de templates. unregister_modifier // nous ne voulons pas que les designers de templates // suppriment les balises des Tlements $smarty->unregister_modifier("strip_tags"); unregister_object void unregister_object string object_name UtilisTe pour dTsallouer un objet. unregister_outputfilter void unregister_outputfilter string function_name UtilisTe pour dTsallouer dynamiquement un filtre de sortie. unregister_postfilter void unregister_postfilter string function_name UtilisTe pour dTsallouer dynamiquement un filtre de post-compilation. unregister_prefilter void unregister_prefilter string function_name UtilisTe pour dTsallouer dynamiquement un filtre de prT-compilation. unregister_resource void unregister_resource string name UtilisTe pour dTsallouer dynamiquement un plugin ressource. Passez en paramFtre le nom de la ressource. unregister_resource $smarty->unregister_resource("db"); Cache Le cache est utilisTe pour accTlTrer l'appel de display() ou de fetch() en sauvegardant leur rTsultat dans un fichier. Si un fichier de cache est disponible lors d'un appel, il sera affichT sans qu'il ne soit nTcessaire de regTnTrer le rTsultat. Le systFme de cache peut accTlTrer les traitements de faton impressionnante, en particulier les templates dont la compilation est trFs longue. Comme le rTsultat de display() ou de fetch() est dans le cache, un fichier de cache peut Otre composT de plusieurs fichiers de templates, plusieurs fichiers de configuration, etc. Comme les templates sont dynamiques, il est important de faire attention a la faton dont les fichiers de cache sont gTnTrTs, et pour combien de temps. Si par exemple vous affichez la page d'accueil de votre site Web dont le contenu ne change pas souvent, il peut Otre intTressant de mettre cette page dans le cache pour une heure ou plus. A l'inverse, si vous affichez une page de mTtTo mises a jour toutes les minutes, mettre cette page en cache n'a aucun sens. ParamTtrer le cache La premiFre chose a faire est d'activer le cache. Cela est fait en mettant $caching = true (ou 1). activation du cache require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = true; $smarty->display('index.tpl'); Avec le cache activT, la fonction display('index.tpl') va afficher le template mais sauvegardera par la mOme occasion une copie du rTsultat dans un fichier (de cache) du rTpertoire $cache_dir. Au prochain appel de display('index.tpl'), le fichier de cache sera prTfTrT a la rTutilisation du template. Note technique Les fichiers situTs dans $cache_dir sont nommTs de la mOme faton que les templates. Bien qu'ils aient une extension ".php", ils ne sont pas vraiment exTcutable. N'Tditez surtout pas ces fichiers ! Tout fichier de cache a une durTe de vie limitTe dTterminTe par $cache_lifetime. La valeur par dTfaut est 3600 secondes, i.e. 1 heure. Une fois que cette durTe est dTpassTe, le cache est regTnTrT. Il est possible de donner une durTe d'expiration propre a chaque fichier de cache en rTglant $caching = 2. Se reporter a la documentation de $cache_lifetime pour plus de dTtails. rTglage individuel de cache_lifetime require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = 2; // rTgler la durTe de vie individuellement // rTgle la durTe de vie du cache a 15 minutes pour index.tpl $smarty->cache_lifetime = 300; $smarty->display('index.tpl'); // rTgle la durTe de vie du cache a 1 heure pour home.tpl $smarty->cache_lifetime = 3600; $smarty->display('home.tpl'); // NOTE : le rTglage suivant ne fonctionne pas quand $caching = 2. La durTe de vie // du fichier de cache de home.tpl a dTja TtT rTglTe a 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 un rapport avec le fichier de cache sera vTrifiT pour dTtecter une Tventuelle modification. Si l'un de ces fichiers a TtT modifiT depuis que le fichier de cache a TtT gTnTrT, le cache est immTdiatement regTnTrT. Ce processus est covteux, donc, pour des raisons de performances, mettez ce paramFtre a false pour une application en production. 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 regTnTrTs. Ceci revient finalement a dTsactiver le cache. $force_compile est utilisT a des fins de dTbogage, un moyen plus efficace de dTsactiver le cache est de rTgler $caching = false (ou 0). La fonction is_cached() permet de tester si un template a ou non un fichier de cache valide. Si vous disposez d'un template en cache qui requiert une requOte a une base de donnTes, vous pouvez utiliser cette mTthode plut(t que $compile_check. 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 fonction de templates insert. Imaginons que toute une page doit Otre mise en cache a part une banniFre en bas a droite. En utilisant une fonction insert pour la banniFre, vous pouvez garder cet TlTment dynamique dans le contenu qui est en cache. Reportez-vous a la documentation insert pour plus de dTtails et des exemples. Vous pouvez effacer tous les fichiers du cache avec la fonction clear_all_cache(), ou de faton individuelle (ou par groupe) avec la fonction clear_cache(). 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 page Vous pouvez avoir plusieurs fichiers de caches pour un mOme appel aux fonctions display() ou fetch(). Imaginons qu'un appel a display('index.tpl') puisse avoir plusieurs rTsultats, en fonction de certaines conditions, et que vous vouliez des fichiers de cache sTparTs pour chacun d'eux. Vous pouvez faire cela en passant un identifiant de cache (cache_id) en deuxiFme paramFtre a l'appel de fonction. Passage d'un cache_id a 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 a display() comme identifiant de cache. Pour chaque valeur distincte de $my_cache_id, un fichier de cache distinct va Otre crTT. Dans cet exemple, "article_id" a TtT passT dans l'URL et est utilisT en tant qu'identifiant de cache. Note technique Soyez prudent en passant des valeurs depuis un client (navigateur Web) vers Smarty (ou vers n'importe quelle application PHP). Bien que l'exemple ci-dessus consistant a utiliser article_id depuis l'URL puisse paraetre commode, le rTsultat peut s'avTrer mauvais. L'identifiant de cache est utilisT pour crTer un rTpertoire sur le systFme de fichiers, donc si l'utilisateur dTcide de donner une trFs grande valeur a article_id ou d'Tcrire un script qui envoie des article_id de faton alTatoire, cela pourra causer des problFmes cotT serveur. Assurez-vous de bien tester toute donnTe passTe en paramFtre avant de l'utiliser. Dans cet exemple, peut-Otre savez-vous que article_id a une longueur de 10 caractFres, est exclusivement composT de caractFres alph-numTriques et doit avoir une valeur contenue dans la base de donnTes. VTrifiez-le bien ! Assurez-vous de bien passer le mOme identifiant aux fonctions is_cached() et clear_cache(). passer un cache_id a is_cached() require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = true; $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 particulier en passant null en tant que premier paramFtre a clear_cache(). effacement de tous les fichiers de cache pour un identifiant de cache particulier 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 maniFre vous pouvez "grouper" vos fichiers de cache en leur donnant le mOme identifiant. groupes de fichiers de cache Vous pouvez faire des groupements plus TlaborTs en paramTtrant les groupes d'identifiant de cache. Il suffit de sTparer chaque sous-groupes avec une barre verticale "|" dans la valeur de l'identifiant de cache. Vous pouvez faire autant de sous-groupes que vous le dTsirez. 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 systFme de cache n'utilise PAS le chemin vers le template en quoi que ce soit pour l'identifiant de cache. Si par exemple vous faites display('themes/blue/index.tpl'), vous ne pouvez pas effacer tous les fichiers de cache dans le rTpertoire "theme/blue". Si vous voulez faire cela, vous devez les grouper avec un mOme identifiant de cache, display('themes/blue/index.tpl','themes|blue'). Vous pouvez ensuite effacer les fichiers de cache pour blue et theme avec clear_cache(null,'theme|blue'). FonctionnalitTs avancTes Objets Smarty donne l'accFs aux objets PHP a travers les templates. Il y a 2 moyens d'y avoir accFs. Le premier consiste a allouer les objets au template puis de les utiliser avec une syntaxe similaire a celles des fonctions personnalisTes. Le deuxiFme moyen consiste a allouer des objets aux templates et de les utiliser comme n'importe quelle variable. La premiFre mTthode a une syntaxe beaucoup plus sympathique. Elle est aussi plus sTcurisTe, puisqu'un objet allouT ne peut avoir accFs qu'a certaines mTthodes et propriTtTs. NTanmoins, un objet allouT ne peut pas avoir de lien sur lui-mOme ou Otre mis dans un tableau d'objet, etc. Vous devez choisir la mTthode qui correspond a vos besoins, mais tGchez d'utiliser la premiFre mTthode autant que possible afin de rTduire la syntaxe des templates au minimum. Si l'option de sTcuritT est activTe, aucune mTthode ou fonctions privTes n'est accessible (commentant par "_"). S'il existe une mTthode et une propriTtT du mOme nom, c'est la mTthode qui sera utilisTe. Vous pouvez restreindre l'accFs aux mTthodes et aux propriTtTs en les listant dans un tableau en tant que troisiFme paramFtre d'allocation. Par dTfaut, les paramFtres passTs aux objets depuis le templates le sont de la mOme faton que les fonctions utilisateurs les rTcupFrent. Le premier paramFtre correspond a un tableau associatif, le second a l'objet Smarty. Si vous souhaitez que les paramFtres soient passTes un a un, comme dans un appel traditionnel, dTfinissez registration, quatriFme paramFtre optionnel, a false. utilisation d'un objet allouT ou assignT <?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'accFs a certaines mTthodes et propriTtTs en les listant $smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1')); // pour utiliser le format habituel de paramFtre objet, passez le boolTen = false $smarty->register_object("foobar",$myobj,null,false); // on peut aussi assigner des objets. Assignez par rTfTrence quand c'est possible $smarty->assign_by_ref("myobj", $myobj); $smarty->display("index.tpl"); ?> TEMPLATE: {* accFs a notre objet enregistrT *} {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 *} {$myobj->meth1("foo",$bar)} Filtres de prT-compilation Les filtres de prT-compilation sont des fonctions PHP que vos templates exTcutent avant qu'ils ne soient compilTs. Cela peut Otre utile pour prT-traiter vos templates afin d'enlever les commentaires inutiles, garder un oeil sur ce que les gens mettent dans leurs templates, etc. Les filtre de prT-compilations peuvent Otre soit dTclarTs soit chargTs a partir des rTpertoires de plugins en utilisant la fonction load_filter() ou en rTglant la variable $autoload_filters. Smarty passera a la fonction le code source en tant que premier argument, et attendra en retour le code modifiT. Utilisation un filtre de prT-compilation de template <?php // mettre ceci dans votre application function remove_dw_comments($tpl_source, &$smarty) { return preg_replace("/<!--#.*-->/U","",$tpl_source); } // enregistrer le filtre de prT-compilation $smarty->register_prefilter("remove_dw_comments"); $smarty->display("index.tpl"); ?> {* template Smarty index.tpl *} <!--# cette ligne va Otre supprimTe par le filtre de prT-compilation --> Filtres de post-compilation Les filtres de post-compilation sont des fonctions PHP que vos templates exTcutent aprFs avoir TtT compilTs. Les filtres de post-compilation peuvent Otre soit dTclarTs soit chargTs depuis les rTpertoires des plugins en utilisant la fonction load_filter() ou en rTglant la variable $autoload_filters. Smarty passera le template compilT en tant que premier paramFtre et attendra de la fonction qu'elle retourne le rTsultat de l'exTcution. utilisation d'un filtre de post-compilation de templates <?php // mettez cela dans votre application function 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 compilT index.tpl *} <!-- Created by Smarty! --> {* reste du contenu du template... *} Filtres de sortie Quand le template est appelT via les fonctions display() ou fetch(), sa sortie est envoyTe a travers un ou plusieurs filtres de sorties. Ils diffFrent des filtres de post-compilation dans le sens ou ils agissent sur la sortie des templates, une fois exTcutTs, et non sur les sources des templates. Les filtres de sortie peuvent Otre soit dTclarTs soit chargTs depuis les rTpertoires des plugins en utilisant la fonction load_filter() ou en rTglant la variable $autoload_filters. Smarty passera la sortie du template en premier argument et attendra de la fonction qu'elle retourne le rTsultat de l'exTcution. utilisation d'un filtre de sortie <?php // mettez ceci dans votre application function 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"); // dorTnavant toute occurence d'un adresse email dans le rTsultat du template // aura un protection simple contre les robots spammers ?> Fonction de gestion du cache Une alternative au mTcanisme de cache par dTfaut (basT sur des fichiers de cache) consiste a spTcifier une fonction de gestion de cache utilisateur qui sera utilisTe pour lire, Tcrire et effacer les fichiers de cache. Il suffit de crTer dans votre application une fonction que Smarty utilisera pour la gestion du cache et d'assigner le nom de cette fonction a la variable de classe $cache_handler_func. Smarty utilisera alors cette fonction pour gTrer les donnTes du cache. Le premier argument est l'action, qui sera 'read', 'write' ou 'clear'. Le second paramFtre est l'objet Smarty. Le troisiFme est le contenu du cache. Pour Tcrire, Smarty passe le contenu du cache dans ces paramFtres. Pour lire, Smarty s'attend a ce que votre fonction accepte ce paramFtre par rTfTrence et que vous le remplissiez avec les donnTes du cache. Pour effacer, il suffit de passer une variable fictive car cette derniFre n'est pas utilisTe. Le quatriFme paramFtre est le nom du fichier de template (utile pour lire/Tcrire), le cinquiFme paramFtre est l'identifiant de cache (optionnel) et le sixiFme est l'identifiant de compilation. 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'; $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; // crTe 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': // rTcupFre le cache dans la base de donnTes $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 donnTes 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; break; case 'clear': // efface les donnTes du cache if(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; } ?> Ressources Les templates peuvent provenir d'une grande variTtT de ressources. Quand vous affichez ou rTcupTrez un template, ou quand vous incluez un template dans un autre template, vous fournissez un type de ressource, suivi par le chemin appropriT et le nom du template. Templates depuis $template_dir Les templates du rTpertoire $template_dir n'ont pas besoin d'une ressource template, bien que vous puissiez utiliser la ressource "file" pour Otre cohTrent. Vous n'avez qu'a fournir le chemin vers le template que vous voulez utiliser, relatif au rTpertoire racine $template_dir. 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 mOme que celui ci-dessus {* le template Smarty *} {include file="index.tpl"} {include file="file:index.tpl"} {* le mOme que celui ci-dessus *} Templates a partir de n'importe quel rTpertoire Les templates en-dehors du rTpertoire $template_dir nTcessitent le type de ressource template, suivi du chemin absolu et du nom du template. utilisation d'un template depuis n'importe quel rTpertoire // 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 un disque identifiT par une lettre (c:) au dTbut du chemin. Assurez-vous de bien mettre "file:" dans le chemin pour Tviter des conflits d'espace de nommage et obtenir les rTsultats escomptTs. 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 rTcupTrer les templates a partir n'importe quelle source a laquelle vous avez accFs avec PHP : base de donnTes, sockets, LDAP et ainsi de suite. Il suffit d'Tcrire les fonctions de ressource plugins et de les enregistrer auprFs de Smarty. Reportez-vous a la section ressource plugins pour plus d'informations sur les fonctions que vous Otes censT fournir. Notez que vous ne pouvez pas Tcraser la ressource file native, toutefois, vous pouvez fournir une ressource qui rTcupFre un template depuis le systFme de fichier par un autre moyen en l'enregistrant sous un autre nom de ressource. utilisation de ressources utilisateurs // le script PHP // mettez ces fonctions quelque part dans votre application function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj) { // requOte BD pour rTcupTrer le template // et remplir $tpl_source $sql = new SQL; $sql->query("select tpl_source from my_table where tpl_name='$tpl_name'"); if ($sql->num_rows) { $tpl_source = $sql->record['tpl_source']; return true; } else { return false; } } function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) { // requOte BD pour remplir $tpl_timestamp $sql = new SQL; $sql->query("select tpl_timestamp from my_table where 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 svrs return true; } function db_get_trusted($tpl_name, &$smarty_obj) { // pas utilisTe 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 dTfaut Vous pouvez spTcifier une fonction qui sera utilisTe pour rTcupTrer le contenu d'un template dans le cas oś le template ne peut pas Otre rTcupTrT depuis sa ressource. Une utilisation possible est la crTation de templates a la volTe. utilisation de la fonction de gestion de template par dTfaut <?php // mettez cette fonction quelque part dans votre application function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj) { if( $resource_type == 'file' ) { if ( ! is_readable ( $resource_name )) { // crTe 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 return false; } } // rTgle la fonction par dTfaut $smarty->default_template_handler_func = 'make_template'; ?> Etendre Smarty avec des plugins La version 2.0 a introduit l'architecture de plugin qui est utilisTe pour pratiquement toute les fonctionnalitTs personnalisables de Smarty. Ceci comprend : les fonctions les modificateurs les fonctions de blocs les fonctions de compilation les filtres de prT-compilation les filtres de post-compilation les filtres de sorties les ressources les insertions A part pour les ressources, la compatibilitT avec les anciennes fatons d'enregistrer les fonctions de gestion avec l'API register_ est conservTe. Si vous n'avez pas utilisT cette API et que vous avez a la place directement modifiT les variables de classes $custom_funcs, $custom_mods et d'autres, vous devez alors modifier vos scripts pour utiliser l'API ou convertir vos fonctionnalitTs personnalisTes en plugins. Comment fonctionnent les plugins Les plugins sont toujours chargTs a la demande. Seuls les modificateurs de variables, les ressources, etc invoquTs dans les scripts de templates seront chargTs. De plus, chaque plugin n'est chargT qu'une fois, et ce mOme si vous avez plusieurs instances de Smarty qui tournent dans la mOme requOte. Les filtres de post/prT-compilation et les filtres de sortie sont des cas un peu spTciaux. Comme ils ne sont pas mentionnTs dans les templates, ils doivent Otre dTclarTs ou chargTs explicitement via les fonctions de l'API avant que le template ne soit exTcutT. L'ordre dans lequel les filtres multiples d'un mOme type sont exTcutTs dTpend de l'ordre dans lequel ils sont enregistrTs ou chargTs. Il n'existe qu'un seul rTpertoire de plugin (pour des raisons de performances). Pour installer un plugin, copiez-le simplement dans le rTpertoire et Smarty l'utilisera automatiquement. Conventions de nommage Les fichiers et les fonctions de plugins doivent suivre une convention de nommage trFs spTcifique pour Otre localisTs par Smarty. Les fichiers de plugins doivent Otre nommTs de la faton suivante :
type.nom.php
type est l'une des valeurs suivantes : function modifier block compiler prefilter postfilter outputfilter resource insert Et nom doit Otre un identifiant valide (lettres, nombres et underscore seulement). Quelques exemples : function.html_select_date.php, resource.db.php, modifier.spacify.php. Les fonctions de plugins dans les fichiers de plugins doivent Otre nommTes de la faton suivante :
smarty_type_nom
Les significations de type et de nom sont les mOmes que prTcTdemment. Smarty donnera des messages d'erreur appropriT si le fichier de plugin n'est pas trouvT, ou si le fichier ou la fonction de plugin ne sont pas nommTs correctement.
Ecrire des plugins Les plugins peuvent Otre soit chargTs automatiquement par Smarty depuis le systFme de fichier, soit Otre dTclarTs pendant l'exTcution via une fonction register_* de l'API. Ils peuvent aussi Otre dTsallouTs en utilisant une fonction unregister_* de l'API. Pour les plugins qui ne sont pas enregistrTs pendant l'exTcution, le nom des fonctions n'ont pas a suivre la convention de nommage. Si certaines fonctionnalitTs d'un plugin dTpendent d'un autre plugin (comme c'est le cas de certains plugins accompagnant Smarty), alors la maniFre appropriTe de charger le plugin est la suivante : require_once SMARTY_DIR . 'plugins/function.html_options.php'; Une rFgle gTnTrale est que chaque objet Smarty est toujours passT au plugin en tant que dernier paramFtre (a part pour les modificateurs). Les fonctions de templates void smarty_function_name array $params object &$smarty Tous les attributs passTs aux fonctions de template a partir du template sont contenus dans le tableau associatif $params. Vous pouvez accTder a ces valeurs soit directement, par exemple $params['start'], soit en utilisant extract($params) pour les importer dans la table des symboles. Le retour de la fonction sera substituTe a la balise de fonction du template (fonction fetch par exemple). Sinon, la fonction peut simplement accomplir une autre tGche sans sortie (la fonction assign par exemple) Si la fonction a besoin d'assigner des variables aux templates ou d'utiliser d'autres fonctionnalitTs fournies par Smarty, elle peut recevoir un objet $smarty pour cela. RTfTrez-vous aussi a : register_function(), unregister_function(). fonction de plugin avec sortie <?php /* * Smarty plugin * ------------------------------------------------------------- * 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 Otre utilisTe dans le template de la faton suivante : Question: Will we ever have time travel? Answer: {eightball}. fonction de plugin sans sortie <?php /* * Smarty plugin * ------------------------------------------------------------- * Fichier : function.assign.php * Type : fonction * Nom : assign * Purpose : assigne une valeur a 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); } ?> Modificateurs Les modificateurs sont des petites fonctions appliquTes a une variable de template avant qu'elle ne soit affichTe ou utilisTe dans un autre contexte. Les modificateurs peuvent Otre chaenTs entre eux. mixed smarty_modifier_name mixed $value [mixed $param1, ...] Le premier paramFtre passT au modificateur est la valeur sur laquelle le modificateur est supposT opTrer. Les autres paramFtres peuvent Otre optionnels, dTpendant de quel genre d'opTration doit Otre effectuT. Le modificateur doit retourner le rTsultat de son exTcution. Regardez aussi register_modifier(), unregister_modifier(). plugin modificateur simple Ce plugin est un alias d'une fonction PHP. Il n'a aucun paramFtre supplTmentaires. <?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); } ?> un plugin modificateur un peu plus complexe <?php /* * Smarty plugin * ------------------------------------------------------------- * Fichier : modifier.truncate.php * Type : modificateur * Name : truncate * R(le : Tronque une chaene a une certaine longueur si * nTcessaire, la coupe optionnellement au milieu * d'un mot et ajoute la chaene $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 $fragment = preg_replace('/\s+(\S+)?$/', '', $fragment); return $fragment.$etc; } else return $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'autres mots, elles englobent des blocs de template et opFrent sur les contenus de ces blocs. Les fonctions de blocs ont la prioritT sur les fonctions utilisateurs de mOme nom, ce qui signifie que vous ne pouvez avoir une fonction utilisateur {func} et une fonction de bloc {func} .. {/func}. L'implTmentation de votre fonction est appelTe deux fois par Smarty : une fois pour la 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 attributs passTs par le template aux fonctions de templates sont contenues dans le tableau associatif $params. Vous pouvez accTder a ces valeurs soit directement, par exemple $params['start'], soit en utilisant extract($params) pour les importer dans la table des symboles. Votre fonction a aussi accFs aux attributs de la balise ouvrante quand c'est la balise fermante qui est exTcutTe. La valeur de la variable $content est diffTrente selon si votre fonction est appelTe pour la balise ouvrante ou la balise fermante. Si c'est pour la balise ouvrante, elle sera a null et si c'est la balise fermante elle sera Tgale au contenu du bloc de template. Notez que le bloc de template aura dTja TtT exTcutT par Smarty, vous recevrez donc la sortie du template et non sa source. Si vous imbriquT des fonctions de bloc, il est possible de connaetre la fonction de bloc parente grGce a la variable $smarty->_tag_stack. Faites un var_dump() dessus et la structure devrait apparaetre. Regardez aussi : register_block(), unregister_block(). 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 $content echo $translation; } } Fonctions de compilation Les fonctions de compilation sont appelTes durant la compilation du template. Elles sont 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 personnalisTe ont le mOme nom, la fonction de compilation a prioritT. mixed smarty_compiler_name string $tag_arg object &$smarty Les fonctions de compilation ont deux paramFtres : une chaene contenant la balise - en gros, tout, depuis le nom de la fonction jusqu'au dTlimiteur de fin - et l'objet Smarty. Elles sont censTes retourner le code PHP qui doit Otre injectT dans le template compilT. Regardez aussi register_compiler_function(), unregister_compiler_function(). fonction de compilation simple <?php /* * Smarty plugin * ------------------------------------------------------------- * Fichier : compiler.tplheader.php * Type : compilation * Nom : tplheader * R(le : Renvoie l'en-tOte 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-Otre appelT depuis le template comme suivant : {* cette fonction n'est executTe que lors de la compilation *} {tplheader} Le code PHP rTsultant dans les templates compilTs ressemblerait a ta : <php echo 'index.tpl compiled at 2002-02-20 20:02'; ?> filtres de prT-compilation/filtres de post-compilation Les filtres de prT-compilation et les filtres de post-compilation ont des concepts trFs proches. Ils diffTrent dans leur exTcution, plus prTcisTment dans le moment oś ils sont exTcutTs. string smarty_prefilter_name string $source object &$smarty Les filtres de prT-compilation sont utilisTs pour transformer la source d'un template juste avant la compilation. Le premier paramFtre passT a la fonction de filtre de prT-compilation est la source du template, Tventuellement modifiTe par d'autres filtre de prT-compilations. Le plugin est supposT retourner la source modifiTe. Notez que cette source n'est sauvegardTe nulle part, elle est seulement utilisT pour la compilation. string smarty_postfilter_name string $compiled object &$smarty Les filtres de post-compilation sont utilisTs pour modifier la sortie du template (le code PHP) juste aprFs que la compilation a TtT faite mais juste avant que le template ne soit sauvegardT sur le systFme de fichiers. Le premier paramFtre passT a la fonction de filtre de post-compilation est le code du template compilT, Tventuellement dTja modifiT par d'autres filtre de post-compilations. Le plugin est censT retourner la version modifiT du code. plugin de filtre de post-compilation <?php /* * Smarty plugin * ------------------------------------------------------------- * Fichier : prefilter.pre01.php * Type : filtre de prT-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); } ?> 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 sortie Les plugins de filtres de sortie opFrent sur la sortie du template, aprFs que le template a TtT chargT et exTcutT, mais avant que la sortie ne soit affichTe. string smarty_outputfilter_name string $template_output object &$smarty Le premier paramFtre passT a la fonction du filtre de sortie est la sortie du template qui doit Otre modifiTe et le second paramFtre est l'instance de Smarty appelant le plugin. Le plugin est supposT faire un traitement et en retourner le rTsultat. 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 protTger 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); } Ressources Les plugins ressources sont un moyen gTnTrique de fournir des sources de templates ou des composants de scripts PHP a Smarty. Quelques exemples de ressources : bases de donnTes, LDAP, mTmoire partagTe, sockets, et ainsi de suite. Il y au total 4 fonctions qui ont besoin d'Otre enregistrTes pour chaque type de ressource. Chaque fonction retoit le nom de la ressource demandTe comme premier paramFtre et l'objet Smarty comme dernier paramFtre. Les autres paramFtres dTpendent 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 premiFre fonction est supposTe rTcupTrer la ressource. Son second paramFtre est une variable passTe par rTfTrence oś le rTsultat doit Otre stockT. La fonction est supposTe retourner true si elle rTussi a rTcupTrer la ressource et false sinon. La seconde fonction est supposTe rTcupTrer la date de derniFre modification de la ressource demandTe (comme un timestamp UNIX). Le second paramFtre est une variable passTe par rTfTrence dans laquelle la date doit Otre stockTe. La fonction est supposTe renvoyer true si elle a rTussi a rTcupTrer la date et false sinon. La troisiFme fonction est supposTe retourner true ou false selon si la ressource demandTe est svre ou non. La fonction est utilisTe seulement pour les ressources templates mais doit tout de mOme Otre dTfinie. La quatriFme fonction est supposTe retourner true ou false selon si on peut faire confiance ou non a la ressource demandTe. Cette fonction est utilisTe seulement pour les composants de scripts PHP demandTs par les balises include_php ou insert ayant un attribut src. Quoiqu'il en soit, elle doit Otre dTfinie pour les ressources templates. Regardez aussi register_resource(), unregister_resource(). resource plugin <?php /* * Smarty plugin * ------------------------------------------------------------- * Fichier : resource.db.php * Type : ressource * Nom : db * R(le : RTcupFre des templates depuis une base de donnTes * ------------------------------------------------------------- */ function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty) { // fait des requOtes BD pour rTcupTrer votre template // et remplir $tpl_source $sql = new SQL; $sql->query("select tpl_source from my_table where 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 requOtes BD pour remplir $tpl_timestamp $sql = new SQL; $sql->query("select tpl_timestamp from my_table where 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 svrs return true; } function smarty_resource_db_trusted($tpl_name, &$smarty) { // inutilisTe pour les templates } ?> Insertions Les plugins d'insertion sont utilisTs pour implTmenter les fonctions qui sont appelTes par les balises insert dans les templates. string smarty_insert_name array $params object &$smarty Le premier paramFtre passT a la fonction est une tableau associatif d'attributs. Vous pouvez accTder a ces valeurs soit directement, par exemple $params['start'], soit en utilisant extract($params) pour les importer dans la table des symboles. La fonction d'insertion est supposTe retourner le rTsultat qui sera substituT a la balise insert dans le template. plugin d'insertion <?php /* * Smarty plugin * ------------------------------------------------------------- * Fichier : insert.time.php * Type : temps * Nom : time * R(le : Insert la date/heure courante conformTment * 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; } ?>