Hyla Tpl
#tpl #template #phplib

Version actuelle
0.7.0

Exemples

Voici des exemples d'applications de Hyla Tpl.

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>

 
Recharger l'exemple

Hello World !

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>

 
Recharger l'exemple

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>

 
Recharger l'exemple

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>

 
Recharger l'exemple

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>
 
Remonter
Logo Hyla Tpl, une rainette Valid XHTML 1.0! Valid CSS!