Le système de template de phpBB
Date de publication : 18/07/2005 ,
Date de mise a jour : 18/07/2005
Par
Genova (Autres articles)
Apprenez à utiliser le système de template du forum phpBB, inspiré du programme PHPLib. Ce tutorial est basé principalement sur des exemples, aussi quelque soit votre niveau vous arriverez sans peine à l'exploiter.
Introduction
Installer le système
1. Les bases de l'utilisation du système
1.1. Votre premier fichier parsé
1.2. Les variables de templates
2. Les blocs
2.1. Créer un bloc
2.2. Les blocs imbriqués
2.3. La notation des sous blocs
2.4. Les variables de blocs
2.5. La notation des variables de blocs
2.6. Un exemple d'utilisation des blocs avec phpBB
3. Solutions aux quelques erreurs que vous pourrez rencontrer
3.1. Template->make_filename(): Error - file (...)fichier.tpl does not exist
3.2. Parse error: parse error, unexpected $end in (...)template.php(127) : eval()'d code on line 114
3.3. Template->loadfile(): No file specified for handle alias
Introduction
Qu'est ce qu'un système de template en PHP ? Il s'agit d'un moyen permettant à un programmeur PHP de travailler de son côté, tout en permettant à un graphiste XHTML par exemple de travailler du sien. Le programmeur PHP aura un fichier .php, le graphiste un fichier .tpl (template). Le système de template mettra en relation ces deux fichiers afin de n'en former plus qu'un seul à la fin. L'intéret d'un tel système est justement de ne pas mélanger PHP et HTML, pour faciliter la vie des graphistes en général. PhpBB utilise donc un système de template qui lui permet de gérer les thèmes du forum sans jamais aller modifier les fichiers PHP, ce qui explique qu'il est si pratique de faire des thèmes pour ce forum.
Installer le système
Cette partie de concerne que ceux qui souhaitent utiliser ce système de template en dehors du cadre phpBB. Vous devez tout d'abord télécharger le fichier template.php disponible ici. Placez le ou vous voullez sur votre FTP et incluez le ensuite dans chaque fichier où vous comptez l'utiliser :
include('template.php');
1. Les bases de l'utilisation du système
1.1. Votre premier fichier parsé
Vous avez donc créer pour tester tout ce que nous allons faire dans le tutorial un fichier test.php ainsi qu'un autre test.tpl. Le premier fichier contient
<?php
include('template.php');
?>
le second :
<b>test !</b>
Maintenant nous allons faire communiquer les deux fichiers ensemble pour au final afficher le résultat HTML, dans le .php mettez maintenant :
<?php
include('template.php');
$template = new Template('./');
$template->set_filenames(array('test' => 'test.tpl'));
$template->pparse('test');
?>
Le résultat visible à l'écran :
1.2. Les variables de templates
Vous pouvez créer dans votre fichier template des variables, qui seront renseignées depuis le fichier .php. La syntaxe des variables est {NOM_DE_LA_VARIABLE}.Par exemple dans votre fichier .tpl mettez :
Je m'appel <b>{NAME}</b> et mon adresse IP est : <i>{IP}</i>
Dans votre fichier .php mettez :
<?php
include('template.php');
$template = new Template('./');
$template->set_filenames(array('test' => 'test.tpl'));
$template->assign_vars(array(
'NAME' => 'Genova',
'IP' => $_SERVER['REMOTE_ADDR'],
));
$template->pparse('test');
?>
Le résultat visible à l'écran :
| Je m'appel Genova et mon adresse IP est : 127.0.0.1 |
2. Les blocs
2.1. Créer un bloc
Les blocs sont des outils très pratiques qui corespondent à des boucles en PHP. Par exemple si vous souahitez afficher X fois la même chose vous pourrez créer un bloc contenant ce que vous souhaitez afficher, et lui dire de s'afficher autant de fois que vous le souhaitez. Le plus simple est de voir ça en exemple. Dans votre fichier .tpl mettez ce code :
<b>Hello ! Mon nom est {NAME} et mon IP est : {IP}</b><br />
Maintenant dans votre fichier .php mettez ceci :
<?php
include('template.php');
$template = new Template('./');
$template->set_filenames(array('test' => 'test.tpl'));
$template->assign_vars(array(
'NAME' => 'Genova',
'IP' => $_SERVER['REMOTE_ADDR'],
));
for ($i = 0; $i < 5; $i++)
{
$template->assign_block_vars('mon_bloc', array());
}
$template->pparse('test');
?>
Le résultat visible à l'écran :
Je m'appel Genova et mon adresse IP est : 127.0.0.1
Je m'appel Genova et mon adresse IP est : 127.0.0.1
Je m'appel Genova et mon adresse IP est : 127.0.0.1
Je m'appel Genova et mon adresse IP est : 127.0.0.1
Je m'appel Genova et mon adresse IP est : 127.0.0.1
|
2.2. Les blocs imbriqués
Vous pouvez imbriquer des blocs, de la même façon que vous imbriquez des boucles en PHP. Par exemple mettez dans votre fichier .tpl :
<b>Je suis dans le premier bloc</b><br />
<i>Je suis dans le second bloc moi par contre</i><br />
<br />
Et dans votre fichier .php :
<?php
include('template.php');
$template = new Template('./');
$template->set_filenames(array('test' => 'test.tpl'));
for ($i = 0; $i < 3; $i++)
{
$template->assign_block_vars('mon_bloc', array());
for ($j = 0; $j < $i + 1; $j++)
{
$template->assign_block_vars('mon_bloc.mon_second_bloc', array());
}
}
$template->pparse('test');
?>
Le résultat visible à l'écran :
Je suis dans le premier bloc
Je suis dans le second bloc moi par contre
Je suis dans le premier bloc
Je suis dans le second bloc moi par contre
Je suis dans le second bloc moi par contre
Je suis dans le premier bloc
Je suis dans le second bloc moi par contre
Je suis dans le second bloc moi par contre
Je suis dans le second bloc moi par contre
|
2.3. La notation des sous blocs
Comme expliqué dans les commentaires, vous remarquerez que lorsqu'on créé un bloc dans un autre bloc, celui ci est considéré comme son fils. Ainsi la notation du nom
du block dans la méthode assign_block_vars() ne sera pas mon_second_bloc mais mon_bloc.mon_second_bloc. Ainsi pour un exemple de fichier template comme ceci :
Vous devrez faire mettre comme nom dans la méthode bloc1.bloc2.bloc3 pour afficher le troisième bloc. Veuillez noter qu'il ne faut pas appeler le troisième bloc si les deux premiers n'ont pas été appelé.
2.4. Les variables de blocs
Nous avons vu dans la première partie du tutorial l'utilisation de variables simples. Ces variables sont accessibles en permanance dans le fichie template. Il est possible aussi de créer des variables spécifiques à des blocs, et de donner des valeurs différentes a ces variables à chaque tour du bloc. Nous allons voir ça avec un exemple, dans votre .tpl mettez :
Voici une variable globale au template qui vaut : {VAR_GLOBAL}<br />
<b>Hello ! Mon nom est {mon_bloc.NAME}</b><br />
Maintenant dans votre fichier .php mettez ceci :
<?php
include('template.php');
$template = new Template('./');
$template->set_filenames(array('test' => 'test.tpl'));
$template->assign_vars(array(
'VAR_GLOBAL' => 'une certaine valeur',
));
$ary = array('pierre', 'paul', 'jacques');
foreach ($ary AS $value)
{
$template->assign_block_vars('mon_bloc', array(
'NAME' => $value,
));
}
$template->pparse('test');
?>
Le résultat visible à l'écran :
Voici une variable globale au template qui vaut : une certaine valeur
Hello ! Mon nom est pierre
Hello ! Mon nom est paul
Hello ! Mon nom est jacques
|
2.5. La notation des variables de blocs
Vous aurez remarqué que les variables de blocs portent comme syntaxe {bloc1.bloc2.blocN.VARIABLE}. Voici un exemple de fichier .tpl valide :
{VARIABLE_GLOBALE}
Bonjour {bloc1.VARIABLE1}
voici {bloc1.bloc2.bloc3.VARIABLE3} ainsi que {bloc1.bloc2.VARIABLE2}
Un exemple de fichier invalide avec les variables de blocs :
{VARIABLE_GLOBALE}
Bonjour {bloc1.VARIABLE1}
voici {bloc1.bloc2.bloc3.VARIABLE3} ainsi que {bloc1.bloc2.VARIABLE2}
Cette variable n'existe pas et est fausse : {bloc1.bloc2.bloc3.VARIABLE4}
2.6. Un exemple d'utilisation des blocs avec phpBB
Dans cette dernière partie concernant les blocs, nous allons voir un exemple concret sur l'utilité des blocs, en se servant des données de phpBB. Nous allons afficher la liste des membres. Dans votre fichier .tpl :
<table>
<tr>
<td>{user.ID}</td>
<td>{user.NAME}</td>
</tr>
</table>
Et dans le fichier .php, sans prendre en compte l'instance des classes et la connexion à la base de donnée :
$sql = 'SELECT user_id, username FROM ' . USERS_TABLE;
$result = $db->sql_query($sql) OR die('erreur SQL');
$template->set_filenames(array('body' => 'test.tpl');
while ($user = $db->sql_fetchrow($result))
{
$template->assign_block_vars('user', array(
'ID' => $user['user_id'],
'NAME' => $user['username']
));
}
$template->pparse('body');
3. Solutions aux quelques erreurs que vous pourrez rencontrer
3.1. Template->make_filename(): Error - file (...)fichier.tpl does not exist
Cette erreur signifie que votre fichier .tpl n'a pas été trouvé, ou n'est pas accessible en lecture. Vérifiez le chemin mis lors de l'instance de la classe.
3.2. Parse error: parse error, unexpected $end in (...)template.php(127) : eval()'d code on line 114
Cette erreur signifie que vous avez une erreur de syntaxe lors de la fusion des fichiers PHP et template, normalement c'est que vous avez fait une erreur au niveau des blocs. Vérifiez bien que chacun de vos blocs <!-- BEGIN ... --> sont fermés par des <!-- END ... -->, que vous n'avez pas mis de caractères bizares (ne mettez que des caractères alphanumériques pour les variables et les blocs), que vous n'avez pas oublier un espace dans la syntaxe du bloc.
3.3. Template->loadfile(): No file specified for handle alias
Cette erreur signifie que vous tentez d'utiliser un alias dans la méthode pparse() qui n'a pas été créé. Vérifiez bien la concordance avec la méthode set_filenames()
Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright Genova. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets.
|