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 :
Vous n'aurez besoin que de 2 fichiers :
- Un fichier gabarit nommé main.tpl contenant le code HTML
- Le fichier php
Voici le bout de code php :
<?php header('Content-type: text/html; charset=UTF-8'); // Inclu les sources de la librairies require 'hyla_tpl.class.php'; // Créé l'objet Hyla_Tpl $t = new Hyla_Tpl('.'); // Import du gabarits $t->importFile('main.tpl'); // Fonction de traduction function traduction($var) { global $lang; if ($lang == 'en') { return $var; } $l10n = array( 'Current path' => 'Chemin courant', 'Size' => 'Taille', 'Name' => 'Nom', 'Switch lang' => 'Changer de langue', ); return (array_key_exists($var, $l10n) ? $l10n[$var] : $var); } // Déclare la fonction de traduction $t->setL10nCallback('traduction'); // Cette fonction renvoie une taille facilement lisible (ex: 1024o renverra 1ko) function get_human_readable_size($bytes) { global $lang; $types = array(null, 'k', 'm', 'g', 't'); for ($i = 0; $bytes >= 1024 && $i < (count($types) -1); $bytes /= 1024, $i++); return round($bytes, 2) . $types[$i] . ($lang == 'fr' ? 'o' : 'b'); } // Enregistre la fonction get_human_readable_size en tant que humansize dans le template $t->registerFunction('humansize', 'get_human_readable_size'); // Récupère les variables get $dir = isset($_GET['dir']) ? $_GET['dir'] : dirname(__FILE__); $dir = realpath($dir); $lang = isset($_GET['lang']) ? $_GET['lang'] : 'fr'; // Assigne quelques variables $t->setVars(array( 'dir' => $dir, 'lang' => $lang, 'lang_switch' => ($lang == 'en' ? 'fr' : 'en'), )); // Ouvre le dossier if (!$files = @scandir($dir)) { exit("Unable to open « $dir »"); } // Parcours des dossiers / fichiers foreach ($files as $file) { $path = realpath("$dir/$file"); $file = array( 'path' => $path, 'name' => $file, 'size' => filesize($path), ); $t->setVar('file', $file); // L'élément courant est un dossier ? if (is_dir($path)) { $t->render('table.line.dir'); } // Affiche la ligne $t->render('table.line'); } // Affiche le résultat echo $t->render(); ?>
Et le code HTML contenant les déclarations pour Hyla_Tpl :
<html> <head> <title></title> </head> <body> <h1>Current path : </h1> <a href="?dir=&lang=">Switch lang : </a> <table width="50%"> <tr> <th width="90%">Nom</th> <th width="10%">Size</th> </tr> <!-- BEGIN table.line --> <tr style="background-color: #DDD;"> <td align="left"> <!-- BEGIN table.line.dir --> <a href="?dir=&lang="><strong></strong></a> <!-- ELSE table.line.dir --> <strong></strong> <!-- END table.line.dir --> </td> <td align="right"> </td> </tr> <!-- END table.line --> </table> </body> </html>
Téléchargez le tout dans la pièce jointe.