Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Non-Officiels > Site Web > PHP > Langage, librairies et fonctions > Lecture du tutoriel

Utilisation d'un moteur de templates : Talus' TPL

Avatar
Auteur : vincent1870
Créé : le 10/04/2008 18:56:35
Modifié : le 05/05/2008 20:00:36
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Bonjour à tous. :)

Si vous venez ici, c'est par envie d'en savoir plus sur les moteurs de templates, et en particulier sur l'un d'entre eux : Talus' TPL. Comme vous l'avez sans doute remarqué, il existe déjà un tuto sur un autre moteur de templates : Gagatemplate (voir le tuto). Ce tuto n'a pas pour but de lui faire de la concurrence mais de vous initier à un autre moteur existant. Il utilise une syntaxe de type XML. ;)

Pré-requis :


Sur ce, je vous souhaite une bonne lecture à la découverte de ce script.
Sommaire du chapitre :

Téléchargement et découverte

Eh, attends : c'est quoi un moteur de templates ?

Ah, j'allais oublier. :D Je vais donc brièvement vous présenter l'utilité d'un tel script.


Rappels / notions concernant un moteur de templates



En général, vous avez souvent un seul fichier par page, qui contient aussi bien le code d'affichage que les requêtes à MySQL notamment, comme ceci :

Code : PHP - Script de news basique
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<h1>Les news du site</h1>
 
<?php
$req = mysql_query("SELECT id, auteur, titre, DATE_FORMAT(date, '%d/%m/%Y %Hh%i') AS date_formatee, contenu
FROM news
ORDER BY date DESC");
while($data = mysql_fetch_assoc($req)){
        echo '
       <div class="news">
               <h2>'.$data['titre'].'</h2>
               <p>News postée le '.str_replace(' ', ' à ', $data['date_formatee']).' par '.$data['auteur'].'</p>
               <p>'.$data['contenu'].'</p>
       </div>';
}
?>


Un moteur de templates vous permet de séparer ce fichier en deux. L'un est chargé de l'affichage du code xHTML, l'autre d'effectuer les requêtes à MySQL, et d'appeler le second fichier.

Vous lirez souvent "utiliser PHP comme moteur de templates". Cela signifie que le second fichier contient alors du code PHP, et qu'il est appelé par un include.

Ce que nous allons voir ici consiste à remplacer le code PHP par un pseudo-langage, présentant les avantages suivants.

Mais bien entendu, il y a des inconvénients à utiliser un tel système.

Notez enfin qu'un tel moteur s'interface très bien avec un modèle MVC (un autre de mes tutos décrivant cette structure).


Présentation et téléchargement de Talus' TPL



Talus'TPL est un moteur portant le nom de son concepteur, Talus. Il est disponible depuis le 2 février 2008, date de sortie de sa version 1.0.0. Il a depuis d'autres versions. La dernière est la 1.2.0. C'est avec celle-ci que nous allons travailler. Ce que je vous apprendrai ici sera valable avec toutes les versions, sauf qu'il est possible que quelques fonctionnalités récentes ne soient pas évoquées. J'essaierai de maintenir le tuto à jour autant que possible. ;)

Commencez donc par télécharger le script sur son forum officiel, rubrique Releases. Prenez la version la plus récente (je rappelle qu'au moment de l'écriture, la version la plus récente était la 1.2.0). Dans le premier message du sujet, vous trouverez les liens pour télécharger le script en .tar.gz ou en .zip.

Ensuite, décompressez l'archive et mettez-la sur votre site avec votre logiciel FTP favori. Vous pouvez mettre les fichiers à la racine ou bien dans un sous-dossier (comme includes, libs, etc.). Notez que vous n'aurez besoin que d'un des deux fichiers require_ftp.php et require_sql.php. Ils servent à gérer le cache. Si vous pouvez écrire dans des dossiers depuis PHP, préférez utiliser require_ftp.php. Sinon, utilisez require_sql.php. Les caches seront alors stockés en base de données (la requête pour créer la base se trouve dans le fichier ;) ).

Aucune installation n'est nécessaire, il suffira d'inclure ces deux scripts (soit talus_tpl.php et require_ftp.php, soit require_sql.php) dans vos pages PHP. :) Les autres fichiers ne sont pas nécessaires, il y a notamment les différences entre la version courante et la version précédente. ;)

Notions de base

Nous allons donc commencer par voir comment utiliser les fonctions principales de Talus' TPL. La première chose à faire est d'instancier un objet de type Talus_TPL. Ce vocabulaire est celui de la Programmation Orientée Objet (ou POO pour les intimes :p ). Je vous expliquerai rapidement tout ce qui est utile ici à ce propos. Pour en savoir plus, référez-vous au tuto de Keeper.


Création de l'objet



Voici le code permettant de créer l'objet Talus_TPL évoqué plus haut :
Code : PHP
1
<?php $tpl = new Talus_TPL($dossier_templates, $dossier_cache); ?>

En POO, l'opérateur new est indispensable pour créer une instance de l'objet. Pour définir les deux dossiers, j'ai personnellement recours à la fonction dirname. Souvent, on se demande par rapport à quoi les chemins doivent être définis (dans un include situé dans un fichier déjà inclus lui-même, par exemple ;) ). Ce bout de code affiche le chemin complet du fichier :
Code : PHP
1
<?php echo dirname(__FILE__); ?>

__FILE__ est une constante contenant automatiquement le nom du fichier courant. Alors, pour inclure un fichier situé dans un dossier parent, je fais :
Code : PHP
1
<?php include dirname(__FILE__).'/../fichier.php'; ?>


Tout ça pour dire que je vais employer la méthode suivante pour définir les deux dossiers. Voici donc le code final :
Code : PHP
1
<?php $tpl = new_Talus_TPL(dirname(__FILE__).'/templates/', dirname(__FILE__).'/cache/'); ?>


Je me place donc dans mon cas personnel où le fichier se trouve à la racine du site, mes templates dans un dossier /templates/ et mon dossier de cache dans /cache/. Adaptez bien sûr à votre cas.

Ça marche pas ton code, tu m'as bien eu. :'(

Ah, en effet. Mais vous devriez avoir trouvé pourquoi. :)
...
...
Si vous avez trouvé, bravo. Il suffisait en effet de penser à inclure le script contenant la classe PHP talus_tpl.php, puis le require_xxx.php (j'en avais déjà parlé, et vous y avez peut-être pensé tout seuls :) ).


Création des deux fichiers



Si vous avez bien tout compris, chaque fichier PHP va se trouver scindé en deux : un fichier PHP différent et un fichier de templates. Avec Talus' TPL, le fichier de template porte l'extension .html. Sa syntaxe est de type XML. Pour plus d'infos, ce tuto de Tangui fait un point complet sur le langage XML. La syntaxe des fichiers de template ainsi que les fonctions PHP seront toutes détaillées par la suite. :)

Sachez que dans le fichier de template, vous aurez en gros deux types de structures :


Tout code PHP dans le template sera affiché tel quel, et ne sera donc pas exécuté !



Affecter un template à un script, et afficher le template



Dans cette partie, nous allons voir quelque chose de primordial : comment afficher un fichier de template. :) En effet, il ne suffit pas de faire un include. Vous devez passer par une méthode dédiée.

Pour affecter un fichier à un objet Talus_TPL (que j'instancie toujours dans une variable $tpl, question d'habitude), on doit passer par la fonction set_file.

Code : PHP
1
<?php $tpl->set_file('template.html'); ?>


Le chemin est -par rapport au chemin des fichiers de templates- indiqué lors de la création de $tpl (reportez-vous ci-dessus si ce n'est pas clair ;) ).

Enfin, la méthode parse vous permet de... parser le template. Comprenez que lorsque vous faites cela, toute la syntaxe spécifique de Talus' TPL est convertie en PHP, qui est enregistré (pour éviter de le retraduire à chaque fois). Ce code PHP est ensuite exécuté. :) Le fichier PHP est modifié à chaque fois que votre template change, de façon automatique. Ce fichier intermédiare est stocké dans le dossier de cache défini à l'instancitation de Talus_TPL.
Il existe des paramères optionnels à cette fonction, et une autre fonction de parsage, mais nous la verrons plus tard. Retenez juste ce schéma pour l'instant :

Code : PHP
1
2
3
4
5
6
<?php
$tpl = new_Talus_TPL(dirname(__FILE__).'/templates/', dirname(__FILE__).'/cache/');
$tpl->set_file('template.html');
/* Diverses opérations que nous allons voir par la suite */
$tpl->parse();
?>


Nous sommes maintenant prêts à voir ces fameuses instructions. Vous pourrez alors apprécier la puissance de ce script, et juger de ses différences par rapport à d'autres systèmes. :)

Utiliser des variables

Affecter et afficher une variable



Une des opérations les plus simples à faire avec votre nouveau moteur de templates est de pouvoir afficher des variables. ;) Comme toute opération (ou presque), elle se passera en deux temps :



Côté PHP



Vous disposez de deux fonctions pour assigner des variables.
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
// On assigne 'abcd' à VAR
$tpl->assign_var('VAR', 'abcd');
 
// On assigne 'abcd' à VAR par l'intermédiaire d'une variable PHP
$texte = 'abcd';
$tpl->assign_var('VAR', $texte);
 
// On assigne des variables multiples via un array
$tpl->assign_vars(array('VAR1'=>'abcd', 'VAR2'=>'efgh', 'AUTRE_VAR'=>12.5));
?>


Quelques remarques donc sur ce code.
La fonction assign_var prend deux arguments : le nom de la variable qui sera utilisée côté template, et sa valeur. Le nom de la variable doit toujours être en majuscules, pour permettre une meilleure lisibilité des fichiers .html. Les variables suivent les mêmes règles de nommage que pour PHP. Vous pouvez ensuite assigner une valeur de n'importe quel type, donc aussi bien un array qu'une chaîne de caractères qu'un entier. Les variables côté PHP et côté template ne doivent pas nécessairement porter le même nom.
L'assignation avec assign_vars permet d'affecter plusieurs variables en une fois. La fonction reçoit un array, avec dans les clés le nom de la variable côté template et en valeur sa valeur ( :D ).

Côté template



L'affichage d'une variable est très simple :
Code : XML
1
{VAR}

affichera le contenu de la variable VAR. Vous pouvez aussi de la même manière accéder aux clés d'un array :
Code : XML
1
{VAR[1]['cle1']}



Échapper une variable



Et si je veux afficher {VAR} dans mon fichier .html, sans que cela soit interprété ?

Pour que VAR ne soit pas affichée, utilisez cela :
Code : XML
1
{\VAR}

Il s'affichera alors :
Citation : Rendu

{VAR}

On dit qu'on échappe la variable. ;)


Utiliser la variable sans l'afficher



Pendant que j'y suis, une autre chose à connaître est la manière d'obtenir la variable sans l'afficher. Cela servira quand nous verrons les conditions.
Code : XML
1
{$VAR}

L'intruction renvoie la valeur de la variable, mais sans l'afficher.


Constantes



Enfin pour finir ce chapitre, voyons l'utilisation des constantes. Vous n'avez pas à les assigner à nouveau, elles sont accessibles depuis le fichier de template sans code additionnel côté PHP. :magicien:
Code : XML
1
{__CONSTANTE__}

Il suffit donc juste de l'entourer de deux tirets bas __. :) Pour obtenir leur valeur, même topo que précédemment :
Code : XML
1
{__$CONSTANTE__}

Employer des conditions

Vous vous demandez sans doute à ce stade comment effectuer des tests simples sur les variables. Bien sûr que Talus' TPL vous l'autorise, et nous allons le voir maintenant. :pirate:


Il existe trois balises de noms, identiques à ceux en PHP, à employer côté template. Notez qu'il n'y a aucune manipulation spéciale à effectuer du côté de PHP. Ces balises sont :


Il y a un argument à passer aux balises if et elseif : la condition. :p En pratique, procédez comme suit (je pars du principe que j'ai créé une variable VAR dans le code PHP) :
Code : XML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<if condition="{$VAR} == 3">
{\VAR} vaut 3
<elseif condition="{$VAR} == 4" />
{\VAR} vaut 4
<elseif condition="{$VAR} == 5" />
{\VAR} vaut 5
/* et ainsi de suite */
<else />
{\VAR} a une autre valeur
</if> /* on n'oublie pas de fermer l'if */


Simple, non ? Notez au passage l'utilisation de l'échappement pour afficher le nom de la variable. N'oubliez pas non plus le signe dollar $ devant la variable (on ne veut pas l'afficher mais récupérer sa valeur).

Un petit raccourci pour les fainéants (que j'utilise souvent pour ma part :p ) : vous pouvez raccourcir le condition en cond. Le code devient donc :
Code : XML
1
2
3
4
5
6
7
8
<if cond="{$VAR} == 3">
{\VAR} vaut 3
<elseif cond="{$VAR} == 4" />
{\VAR} vaut 4
<elseif cond="{$VAR} == 5" />
{\VAR} vaut 5
<else />
{\VAR} a une autre valeur


Et pour faire des boucles ?

Justement, ça tombe bien, j'y viens. :D Les boucles sont très utilisées, que ce soit pour parcourir des array, ou récupérer un résultat provenant d'une base de données contenant plusieurs lignes. :)


Parcourir un array avec foreach



Vous êtes sans doute habitués à vous balader dans des array avec la fonction foreach en PHP. Eh bien, bonne nouvelle, vous pouvez faire la même chose avec Talus' TPL du côté des templates. :) La syntaxe est cette fois-ci un peu différente de celle utilisée en PHP. Vous utiliserez la balise foreach, mais en lui fournissant un seul argument : l'array à parcourir.

Code : XML
1
2
3
<foreach ary="{$ARRAY}">
/* Opérations sur l'array */
</foreach>


Une fois entre les deux balises du foreach, vous pouvez accéder soit à la clé, soit à la valeur contenue dans l'array. À chaque itération, ces deux données changent bien évidemment, comme en PHP. Vous devez donc concrètement spécifier si vous voulez la clé ou la valeur, et de quel array (cela vous permet d'imbriquer des foreach).
Code : XML
1
2
3
4
<foreach ary="{$ARRAY}">
La clé est {KEY,ARRAY} est sa valeur {VALUE,ARRAY}
<if cond="{VALUE,$ARRAY} == 1">Même que sa valeur est 1</if>
</foreach>


Vous pouvez donc soit afficher les valeurs des variables ({KEY,ARRAY} et {VALUE,ARRAY}), soit obtenir leurs valeurs pour effectuer des tests dessus ({KEY,$ARRAY} et {VALUE,$ARRAY}).

Notez pour finir que la possibilité de renommer un array est apparue, comme en PHP. Cela vous permet d'imbriquer des array, éventuellement identiques. Procédez comme suit :
Code : XML
1
2
3
4
<foreach ary="{$ARRAY}" as ="{$ARY}">
La clé est {KEY,ARY} est sa valeur {VALUE,ARY}
<if cond="{VALUE,$ARY} == 1">Même que sa valeur est 1</if>
</foreach>



Utiliser des blocs



Notez que vous pouvez dès à présent afficher des données obtenues depuis votre base de données en les stockant dans un array et en les affichant grâce à l'instruction vue ci-dessus. Mais il y a une autre méthode, adaptée spécifiquement à ce cas : les blocs. Chaque bloc est caractérisé par un nom. Vous pouvez lui assigner une valeur que vous récupèrerez via une clé. La différence est que si vous demandez à affecter une valeur à une clé déjà définie, au lieu d'être écrasée, une nouvelle entrée est créée ! De la sorte, vous pouvez affecter diverses variables dans un mysql_fetch_assoc, par exemple. :) C'est un cas très utilisé. Petit exemple :
Code : PHP
1
2
3
4
5
6
7
<?php
$req = mysql_query("SELECT id FROM membres");
while($data = mysql_fetch_assoc($req)){
    // on assigne l'id au bloc 'bloc'
    $tpl->assign_block_vars('bloc', 'ID', $data['id']);
}
?>


Et pour récupérer ce petit monde :
Code : XML
1
2
3
<block name="bloc">
{bloc.ID}
</block>


Vous avez une fois de plus la possibilité d'utiliser {$bloc.ID} pour récupérer la valeur et {\bloc.ID} pour échapper. Nottez aussi la balise blockelse qui affiche son contenu si le bloc n'a pas été exécuté (souvent s'il est vide).
Code : XML
1
2
3
4
5
<block name="bloc">
{bloc.ID}
<blockelse />
Aucun membre.
</block>


Des variables sont automatiquement affectées au bloc, sans que vous n'ayez rien à faire. Il s'agit de :


Vous les récupérez de la manière classique :
Code : XML
1
2
3
4
5
<block name="bloc">
Membre d'id {bloc.ID} ({blod.CURRENT} occurence / {bloc.SIZE_OF} occurence(s))
<blockelse />
Aucun membre.
</block>


Enfin, notez la possible imbrication de blocs dans des blocs. Le nom du sous-bloc est alors composé avec les noms des blocs parents à gauche, et en dernier son propre nom, chaque nom étant séparé du précédent par un point. Vous pouvez alors arriver à un bloc : parent.fils.petit_fils.bebe :p . Pour le récupérer dans le template, spécifiez uniquement le nom du parent le plus proche (donc petit_fils pour bebe, fils pour petit_fils et rien pour parent) :
Code : XML
1
2
3
4
5
6
7
8
<block name="parent">
    <block name="parent.fils">
        <block name="fils.petit_fils">
            <block name="petit_fils.bebe">
            </block>
        </block>
    </block>
</block>

Maintenant, les inclusions !

Vous pouvez inclure un template depuis un autre fichier de template. Il vous suffit d'utiliser la balise include, en envoyant comme argument le chemin vers le template à inclure. Enfin, vous pouvez spécifier si vous désirez ne l'inclure qu'une fois (à savoir que s'il a déjà été inclus, il ne pourra pas l'être à nouveau plus tard ; c'est l'équivalent de include_once / require_once en PHP ;) ), en envoyant un boolean (true ou false);.

Code : XML
1
2
<include tpl="menu.tpl" /> /* strictement équivalent à <include tpl="menu.tpl" once="false" /> */
<include tpl="erreur.tpl" once="true">


Simple, clair et efficace. :)

Quelques petits ajouts bien pratiques

Avant de finir notre étude théorique du moteur de template, nous allons passer en revue deux autres syntaxes très pratiques. :)

Manipuler des variables depuis le template



Vous avez la possibilité de manipuler les variables directement depuis le template. En général, il n'est pas conseillé de le faire, car vous perdez ainsi la séparation entre code logique et code d'affichage. Cependant cette fonction existe, il peut être bon de la connaître quand même. ;)

Code : XML
1
<var name="VAR" value="une chaine de caractères" />


Avec ce petit code, on affecte à la variable VAR la valeur "une chaine de caractères". Notez que vous n'avez pas besoin d'utiliser la syntaxe avec les accolades {}, mais que le nom doit rester en majuscules. Si une telle variable existait déjà, son ancienne valeur est écrasée ; sinon une nouvelle variable de template est créée.

Vous pouvez également procéder de même dans les blocs (voir la partie sur les boucles, si vous avez déjà tout oublié les concernant :-° ) :

Code : XML
1
<var name="bloc.VAR" value="une chaine de caractères" />



Utiliser des fonctions utilisateur



Derrière ce nom se cache une fonctionnalité très pratique de Talus' TPL. Vous pouvez en effet ajouter vos propres fonctions au moteur de templates, ce qui le rend extensible très facilement. Il y a des tâches que nous avons à effectuer couramment dans des templates. Je prendrai ici l'exemple de l'affichage d'un pseudo, coloré avec la couleur de son groupe et menant vers le profil. Vous ferez en général quelque chose comme :

Code : PHP
1
<?php echo '<a href="/profil'.$id.'.html" style="color: '.$couleur.';">'.$pseudo.'</a>'; ?>


Mais si vous voulez changer cet affichage pour changer le lien vers le profil par exemple, vous devrez changer tous vos templates. Une meilleure solution consiste à utiliser une fonction utilisateur !

La fonction se caractérise par un nom et une liste d'arguments (ou pas :D ). Entre les balises de définition, vous spécifiez le texte qui sera affiché à son appel. La fonction se définit et s'utilise uniquement côté template.

Code : XML
1
2
3
<function name="profil" arg="PSEUDO" arg="ID" arg="COULEUR">
<a href="profil-{ID}.html" style="color: {COULEUR};">{PSEUDO}</a>
</function>


Ceci est un exemple des seules capacités de la fonction. Comme d'habitude, les arguments doivent être nommés en respectant les règles de nommage des variables. ;) Vous pouvez utiliser les variables passées en argument, ou bien des variables globales à utiliser de la façon suivante :
Code : XML
1
2
3
4
5
/* Pour avoir la valeur */
{GLOB,$VAR}

/* Pour afficher la variable */
{GLOB,VAR}


Pour appeler votre fonction, utiliser call, en spécifiant les arguments, dans le même ordre que lorsque vous avez défini la fonction. L'argument donné peut avoir un nom différent de celui utilisé dans la définition de la fonction, comme en PHP. ;)

Code : XML
1
<call name="profil" arg="vincent1870" arg="43623" arg="black" />


Vous pouvez bien sûr passer des variables de template à vos fonctions, y compris dans des foreach ou des blocs, où elles révèlent toute leur puissance :

Code : XML
1
<call name="profil" arg="{$PSEUDO}" arg="{$ID}" arg="{$GROUPE_COULEUR}" />


Tous les arguments précisés dans la définition de la fonction son obligatoires lors de son appel. De même, vous devez les donner dans le même ordre. :)



Gestionnaire d'erreurs



Pour cette fonction, vous n'avez rien à faire. Seulement, dès qu'une erreur est rencontrée, au lieu de recevoir un obscure erreur PHP dont la source serait talus_tpl.php, vous avez droit à une erreur PHP plus classique, avec en bonus, les lignes où se situent l'erreur. :)

A noter que cette fonction est désactivée par défaut car elle bug de temps en temps, pour une erreur en cours de résolution.

Mise en oeuvre : un système de news

Reprenons l'exemple usé jusqu'à la corde du système de news. Je vais vous donner un code PHP "banal", et à vous de l'adapter à ce moteur de template. :)

Voici le code pour créer une table news avec quelques éléments déjà insérés :

Code : SQL
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE `news` (
`id` SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`titre` VARCHAR( 255 ) NOT NULL ,
`auteur` VARCHAR( 255 ) NOT NULL ,
`date` DATETIME NOT NULL ,
`contenu` TEXT NOT NULL
) ENGINE = MYISAM ;
 
INSERT INTO `news` (
`id` ,
`titre` ,
`auteur` ,
`date` ,
`contenu`
)
VALUES (
NULL , 'Une première news', 'vincent1870', '2007-12-30 18:38:02', 'Bienvenue à tous sur ce beau site !<br /> <br /> Bon surf ! ;)'
), (
NULL , 'Et une deuxième', 'Arthur', '2007-12-11 18:38:44', 'Hello !<br /> What''s happening ?'
);


Copiez-collez ce code dans phpMyAdmin, onglet SQL, pour créer votre table. ;)

Et voici le code PHP. Je ne le commenterai pas ; si vous avez du mal à le comprendre, relisez les cours de M@teo21. :)

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
//On démarre la session
session_start();
 
//On se connecte à MySQL
mysql_connect('localhost', 'root', '');
mysql_select_db('tests');
?>
 
<h1>Les news du site</h1>
 
<?php
$req = mysql_query("SELECT id, auteur, titre, DATE_FORMAT(date, '%d/%m/%Y %Hh%i') AS date_formatee, contenu
FROM news
ORDER BY date DESC");
while($data = mysql_fetch_assoc($req)){
        echo '
       <div class="news">
               <h2>'.$data['titre'].'</h2>
               <p>News postée le '.str_replace(' ', ' à ', $data['date_formatee']).' par '.$data['auteur'].'</p>
               <p>'.$data['contenu'].'</p>
       </div>';
}
 
//On ferme la connexion à MySQL
mysql_close();
?>


Bon, maintenant au boulot ! Vous devez me transformer ce script pour y intégrer Talus' TPL. Vous devrez donc créer un second fichier, contenant le template. Bonne chance !




Bien ! Voici maintenant le corrigé, pour comparer nos travaux. Je commence par news.php :
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
//On démarre la session
session_start();
 
//On se connecte à MySQL
mysql_connect('localhost', 'root', '');
mysql_select_db('tests');
 
//On inclut et démarre Talus' TPL
include 'require_ftp.php';
include 'talus_tpl.php';
$tpl = new Talus_TPL('./', 'cache/');
 
//On définit le fichier de template
$tpl->set_file('news.html');
 
//On stocke les news dans un array
$news = array();
$req = mysql_query("SELECT id, auteur, titre, DATE_FORMAT(date, '%d/%m/%Y %Hh%i') AS date_formatee, contenu
FROM news
ORDER BY date DESC");
while($data = mysql_fetch_assoc($req)){
        $data['date_formatee'] = str_replace(' ', ' à ', $data['date_formatee']);
        $news[] = $data;
}
 
//On assigne la liste des news
$tpl->assign_var('NEWS', $news);
 
//On affiche le résultat
$tpl->parse();
 
//On ferme la connexion à MySQL
mysql_close();
?>


Le code se comprend facilement si vous avez lu tout ce qui précède. Je considère que le template est dans le même dossier, et que vous diposez d'un dossier cache/ à la racine. Et voici le template news.html :
Code : XML
1
2
3
4
5
6
7
8
9
<h1>Les news du site</h1>
 
<foreach ary="{$NEWS}">
       <div class="news">
               <h2>{VALUE,NEWS['titre']}</h2>
               <p>News postée le {VALUE,NEWS['date_formatee']} par {VALUE,NEWS['auteur']}</p>
               <p>{VALUE,NEWS['contenu']}</p>
       </div>
</foreach>

Je finirai par vous laisser quelques liens relatifs à Talus' TPL.


J'espère que ce tutoriel vous a été profitable. Les commentaires sont là, mais je rappelle juste qu'ils ne doivent pas servir de support pour ce script (je ne suis pas son développeur). Les liens ci-dessus sont là pour ça. :)

Je remercie Talus pour ses conseils avisés et ptipilou pour sa correction efficace.
Auteur : vincent1870
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Nombre de connectés 434 Zér0s connectés | Requêtes SQL 8 requêtes | Temps de génération de la page 0.0401s (0.02s)

Changer de design - Revue de presse - En savoir plus - Plan du site
Nous contacter - Mentions légales - Publicité
Politique d'accessibilité - Fil RSS - XHTML 1.0 - CSS 2.0

Y'a plus rien à lire, faut remonter maintenant !