Exemples
Voici des exemples d'applications de Hyla Tpl.
- Hello world !
- Hello world amélioré !
- Variable par défaut et bloc else
- Listage de données
- Un explorateur de fichiers
Hello world !
Un exemple très simple de Hello world
<?php
require 'hyla_tpl.class.php';
// Créé l'objet Hyla_Tpl
$tpl = new Hyla_Tpl('.');
// Import le fichier hello.tpl
$tpl->importFile('hello.tpl');
// La variable de template var vaut Hello World !
$tpl->setVar('var', 'Hello World !');
// Affiche le résultat
echo $tpl->render();
?>
<h1>{$var}</h1>
Hello world amélioré !
Un exemple amélioré de Hello world.
Le fonctionnement est simple, si la variable name n'est pas déclarée, c'est la valeur par défaut qui est chargée, dans l'exemple, « world ».
Rechargez la démo plusieurs fois afin de voir la différence.
<?php
require 'hyla_tpl.class.php';
// Créé l'objet Hyla_Tpl
$tpl = new Hyla_Tpl('.');
// Import le fichier hello.tpl
$tpl->importFile('hello2.tpl');
// Change la valeur du cookie une fois sur 2
setcookie('test', !@$_COOKIE['test'], time() + 3600);
// Assigne you à la variable name une fois sur 2
if (@$_COOKIE['test']) {
$tpl->setVar('name', 'you');
}
// Affiche le résultat
echo $tpl->render();
?>
<h1>Hello {$name (world)} !</h1>
Hello you !
Variable par défaut et bloc else
Voici un exemple mettant en application les variables par défaut et les blocs else.
Le bloc user_status n'est jamais appelé et la variable $user ne vaut rien, le contenu du bloc ELSE est alors affiché et la valeur par défaut de la variable $user est alors affichée.
Rechargez la démo plusieurs fois afin de voir la différence.
<?php
header('Content-type: text/html; charset=utf-8');
require 'hyla_tpl.class.php';
// Créé l'objet Hyla_Tpl
$tpl = new Hyla_Tpl('.');
$tpl->importFile('default', 'default.tpl');
class User {
var $first_name;
var $last_name;
}
$user = new User;
$user->first_name = 'George';
$user->last_name = 'Orwell';
// Change la valeur du cookie une fois sur 2
setcookie('test', !@$_COOKIE['test'], time() + 3600);
// Assigne you à la variable name une fois sur 2
if (@$_COOKIE['test']) {
$tpl->setVar('user', $user);
$tpl->render('user_status');
}
// Affiche le résultat
echo $tpl->render();
?>
<p>
<!-- BEGIN user_status -->
<strong>
Vous êtes loggué en tant que
{$user.first_name} {$user.last_name} !
</strong>
<!-- ELSE user_status -->
Veuillez vous connecter !
<!-- END user_status -->
</p>
Veuillez vous connecter !
Listage de données
Voici un exemple de listage de données sous forme tabulaire
<?php
require 'hyla_tpl.class.php';
$tpl = new Hyla_Tpl('.');
$tpl->importFile('list', 'list.tpl');
// Les données
$data = array(
array( 'name' => 'Marc', 'age' => 26),
array( 'name' => 'Paul', 'age' => 18),
array( 'name' => 'Thomas', 'age' => 54),
array( 'name' => 'Edgard', 'age' => 31),
);
$tpl->setVar('user_count', count($data};
// Parcours les données
foreach ($data as $user) {
$tpl->setVar('user', $user);
$tpl->render('line');
}
// Affiche le résultat
echo $tpl->render();
?>
<p>
Il y a {$user_count} utilisateur(s) !
</p>
<table>
<tr>
<th>Nom</th>
<th>Age</th>
</tr>
<!-- BEGIN line -->
<tr style="background-color: red">
<td>{$user.name}</td>
<td>{$user.age}</td>
</tr>
<!-- END line -->
</table>
Il y a 4 utilisateur(s) !
| Nom | Age |
|---|---|
| Marc | 26 |
| Paul | 18 |
| Thomas | 54 |
| Edgard | 31 |
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.
Plus d'info ici : Un exemple d'utilisation de Hyla_Tpl : Un explorateur de fichiers (Attention, la version de Hyla Tpl contenu dans l'exemple du lien est ancienne)
<?php
// 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('explorer.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->registerVarFunction('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();
?>
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>{_Current path} : {$dir}</h1>
<a href="?dir=&lang=">{_Switch lang} : {$lang_switch}</a>
<table width="50%">
<tr>
<th width="90%">{_Name}</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={$file.path}&lang="><strong>{$file.name}</strong></a>
<!-- ELSE table.line.dir -->
<strong>{$file.name}</strong>
<!-- END table.line.dir -->
</td>
<td align="right">
{$file.size|humansize}
</td>
</tr>
<!-- END table.line -->
</table>
</body>
</html>