Manuel Smarty

Ressources

Les templates peuvent provenir d'une grande variété de ressources. Quand vous affichez (display()) ou récupérez (fetch()) un template, ou quand vous incluez un template dans un autre template, vous fournissez un type de ressource, suivi par le chemin approprié et le nom du template. Si une ressource n'est pas explicitement donnée, la valeur de la variable $default_resource_type sera utilisée.

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

  1. <?php
  2. $smarty->display("index.tpl");  
  3. $smarty->display("admin/menu.tpl");  
  4. $smarty->display("file:admin/menu.tpl"); // le même que ci-dessus
  5. ?>
  6.  
  7. {* le template Smarty *}
  8. {include file="index.tpl"}
  9. {include file="file:index.tpl"} {* le même que ci-dessus *} 

Templates à partir de n'importe quel répertoire

Les templates en-dehors du répertoire $template_dir nécessitent le type de ressource template, suivi du chemin absolu et du nom du template.

Exemple 15-7. Utilisation d'un template depuis n'importe quel répertoire

  1. <?php
  2. $smarty->display('file:/export/templates/index.tpl');  
  3. $smarty->display('file:/path/to/my/templates/menu.tpl');  
  4. ?> 

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 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 noms et obtenir les résultats escomptés.

Exemple 15-8. Utilisation de templates avec des chemins de fichiers Windows

  1. <?php
  2. $smarty->display('file:C:/export/templates/index.tpl');  
  3. $smarty->display('file:F:/path/to/my/templates/menu.tpl');  
  4. ?> 

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 de n'importe quelle source à laquelle vous avez accès avec PHP : base de données, sockets, LDAP et ainsi de suite. Il suffit d'é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 fonctions que vous êtes censé fournir.

Note : Notez que vous ne pouvez pas écraser la ressource file: native, toutefois, vous pouvez fournir une ressource qui récupère un template depuis le système de fichier par un autre moyen en l'enregistrant sous un autre nom de ressource.

Exemple 15-9. Utilisation de ressources utilisateurs

  1. <?php
  2. // mettez ces fonctions quelque part dans votre application
  3. function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)  
  4. { 
  5.    // requête BD pour récupérer le template
  6.    // et remplir $tpl_source
  7.    $sql = new SQL; 
  8.    $sql->query("select tpl_source
  9.              from my_table
  10.              where tpl_name='$tpl_name'"); 
  11.    if ($sql->num_rows) { 
  12.       $tpl_source = $sql->record['tpl_source']; 
  13.       return true; 
  14.    } else { 
  15.       return false; 
  16.    }  
  17. }  
  18.  
  19. function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)  
  20. { 
  21.    // requête BD pour remplir $tpl_timestamp
  22.    $sql = new SQL; 
  23.    $sql->query("select tpl_timestamp
  24.              from my_table
  25.              where tpl_name='$tpl_name'"); 
  26.    if ($sql->num_rows) { 
  27.       $tpl_timestamp = $sql->record['tpl_timestamp']; 
  28.       return true; 
  29.    } else { 
  30.       return false; 
  31.    }  
  32. }  
  33.  
  34. function db_get_secure($tpl_name, &$smarty_obj)  
  35. { 
  36.    // on suppose que tous les templates sont svrs
  37.    return true;  
  38. }  
  39.  
  40. function db_get_trusted($tpl_name, &$smarty_obj)  
  41. { 
  42.    // pas utilisée pour les templates dans notre cas
  43. }  
  44.  
  45. // enregistre le nom de ressource "db"
  46. $smarty->register_resource("db", array("db_get_template", 
  47.                            "db_get_timestamp", 
  48.                            "db_get_secure", 
  49.                            "db_get_trusted"));  
  50.  
  51. // utilise la ressource depuis le script PHP
  52. $smarty->display("db:index.tpl");  
  53. ?> 

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'un template 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

  1. <?php
  2. // mettez cette fonction quelque part dans votre application
  3.  
  4. function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp,  
  5. &$smarty_obj)  
  6. {  
  7. if( $resource_type == 'file' ) { 
  8.    if ( ! is_readable ( $resource_name )) { 
  9.    // crée le fichier de template et renvoie le contenu
  10.    $template_source = "Ceci est un nouveau template."; 
  11.    $template_timestamp = time(); 
  12.    $smarty_obj->_write_file($resource_name,$template_source); 
  13.    return true; 
  14.    }  
  15. } else { 
  16.    // pas un fichier
  17.    return false;  
  18. }  
  19. }  
  20.  
  21. // règle la fonction par défaut
  22. $smarty->default_template_handler_func = 'make_template';  
  23. ?> 

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Bretagne - php - Moto - Kit graphique