Un exemple d'utilisation de Hyla_Tpl : Un explorateur de fichiers

Voici un exemple de programme réalisé avec Hyla_Tpl, il liste les éléments contenus dans un dossier et permet de naviguer dans l'arborescence, avec des textes en anglais et français afin de démontrer la facilité d'incorporer des éléments à traduire dans les gabarits, en fait, c'est une sorte de mini-Hyla ;)

Le code est commenté et est assez parlant, il démontre assez bien la facilité d'utilisation de ce moteur de gabarit léger et rapide.

Voici à quoi cela ressemble :

Capture d'écran de l'explorateur de fichiers réalisé

Vous n'aurez besoin que de 2 fichiers :

  1. Un fichier gabarit nommé main.tpl contenant le code HTML
  2. Le fichier php

Voici le bout de code php :

  1. <?php
  2.  
  3. header('Content-type: text/html; charset=UTF-8');
  4.  
  5. // Inclu les sources de la librairies
  6. require 'hyla_tpl.class.php';
  7.  
  8.  
  9. // Créé l'objet Hyla_Tpl
  10. $t = new Hyla_Tpl('.');
  11.  
  12.  
  13. // Import du gabarits
  14. $t->importFile('main.tpl');
  15.  
  16.  
  17. // Fonction de traduction
  18. function traduction($var) {
  19. global $lang;
  20. if ($lang == 'en') {
  21. return $var;
  22. }
  23. $l10n = array(
  24. 'Current path' => 'Chemin courant',
  25. 'Size' => 'Taille',
  26. 'Name' => 'Nom',
  27. 'Switch lang' => 'Changer de langue',
  28. );
  29. return (array_key_exists($var, $l10n) ? $l10n[$var] : $var);
  30. }
  31.  
  32.  
  33. // Déclare la fonction de traduction
  34. $t->setL10nCallback('traduction');
  35.  
  36.  
  37. // Cette fonction renvoie une taille facilement lisible (ex: 1024o renverra 1ko)
  38. function get_human_readable_size($bytes) {
  39. global $lang;
  40. $types = array(null, 'k', 'm', 'g', 't');
  41. for ($i = 0; $bytes >= 1024 && $i < (count($types) -1); $bytes /= 1024, $i++);
  42. return round($bytes, 2) . $types[$i] . ($lang == 'fr' ? 'o' : 'b');
  43. }
  44.  
  45. // Enregistre la fonction get_human_readable_size en tant que humansize dans le template
  46. $t->registerFunction('humansize', 'get_human_readable_size');
  47.  
  48.  
  49. // Récupère les variables get
  50. $dir = isset($_GET['dir']) ? $_GET['dir'] : dirname(__FILE__);
  51. $dir = realpath($dir);
  52.  
  53. $lang = isset($_GET['lang']) ? $_GET['lang'] : 'fr';
  54.  
  55.  
  56. // Assigne quelques variables
  57. $t->setVars(array(
  58. 'dir' => $dir,
  59. 'lang' => $lang,
  60. 'lang_switch' => ($lang == 'en' ? 'fr' : 'en'),
  61. ));
  62.  
  63.  
  64. // Ouvre le dossier
  65. if (!$files = @scandir($dir)) {
  66. exit("Unable to open « $dir »");
  67. }
  68.  
  69. // Parcours des dossiers / fichiers
  70. foreach ($files as $file) {
  71.  
  72. $path = realpath("$dir/$file");
  73.  
  74. $file = array(
  75. 'path' => $path,
  76. 'name' => $file,
  77. 'size' => filesize($path),
  78. );
  79. $t->setVar('file', $file);
  80.  
  81.  
  82. // L'élément courant est un dossier ?
  83. if (is_dir($path)) {
  84. $t->render('table.line.dir');
  85. }
  86.  
  87.  
  88. // Affiche la ligne
  89. $t->render('table.line');
  90. }
  91.  
  92. // Affiche le résultat
  93. echo $t->render();
  94.  
  95. ?>

Et le code HTML contenant les déclarations pour Hyla_Tpl :

  1. <html>
  2.  
  3. <head>
  4. <title></title>
  5. </head>
  6.  
  7. <body>
  8.  
  9. <h1>Current path : </h1>
  10.  
  11. <a href="?dir=&lang=">Switch lang : </a>
  12.  
  13. <table width="50%">
  14. <tr>
  15. <th width="90%">Nom</th>
  16. <th width="10%">Size</th>
  17. </tr>
  18.  
  19. <!-- BEGIN table.line -->
  20. <tr style="background-color: #DDD;">
  21. <td align="left">
  22. <!-- BEGIN table.line.dir -->
  23. <a href="?dir=&lang="><strong></strong></a>
  24. <!-- ELSE table.line.dir -->
  25. <strong></strong>
  26. <!-- END table.line.dir -->
  27. </td>
  28. <td align="right">
  29. </td>
  30. </tr>
  31. <!-- END table.line -->
  32.  
  33. </table>
  34.  
  35. </body>
  36.  
  37. </html>

Téléchargez le tout dans la pièce jointe.

Vus : 937
Publié par Hyla project : 22