Les systèmes de templates

 

Les systèmes de templates

  1. Qu'est ce que c'est
  2. Affectation de variables à un template
  3. Les blocks
  4. Les blocks imbriqués
  5. Imbrication des templates
  6. Informations complémentaires
  7. Liens connexes

Qu'est ce que c'est

template est un mot anglais qui peut se traduire par modèle ou gabarit.
Le principe est de séparer le code php de la mise en page html; Le code php dans un fichier, la mise en page contenant les balises html dans un autre fichier. On se retrouve alors avec, d'un coté, le script qui fait tout ce qu'il a à faire (ex: récupération de données dans une base de données, traitement…), et d'un autre coté, la mise en page avec des zones prédéfinies où seront placées les données générées par le script. L'avantage évident est de pouvoir travailler uniquement sur la mise en page, sans modifier quoi que ce soit dans le code php et inversement, ou de diviser efficacement le travail à faire, le programmeur s'occupant uniquement de la partie scripting, et le designeur, de la mise en page.
Représentation simpliste et symbolique du fonctionnement d'un système de template :

Représentation des templates

Merci à Nico pour le schéma :)

Pour la suite de cet article/tutorial, nous travaillerons avec le système de templates du célèbre forum phpBB dont le fonctionnement est très proche de la phplib [1].
Pour télécharger les sources de ce tutoriel , rendez vous tout en bas de la page.

Affectation de variables à un template

Nous allons commencer par un exemple simple : Récupération d'un pseudo et d'une adresse email à partir d'une base de données puis affectation des données au template.
Voici le fichier test1.php :

<?php
  include('template.php');

  $connect = mysql_connect('localhost', 'root', '');
  mysql_select_db('database', $connect);

  $result = mysql_query("SELECT pseudo, email FROM table_users WHERE id = '1'");
  $row = mysql_fetch_array($result);

  /*
   * Nous admettrons ici que le pseudo obtenu est bobe
   * et l'email est bobe@domain.com
   */

  // on créé une nouvelle instance de la classe Template
  // et on indique en argument le chemin vers les modèles
  $template = new Template('./');

  // modèle à utiliser auquel on adjoint un nom arbitraire

  $template->set_filenames(array(
    'body' => 'template1.tpl'
  ));

  // Assignation des variables

  $template->assign_vars(array(
    'PSEUDO' => $row['pseudo'],
    'EMAIL'  => $row['email']

  ));

  // Affichage des données

  $template->pparse('body');
?>

Et voilà le fichier template1.tpl, le modèle que nous allons utiliser. Un fichier .tpl contient ni plus ni moins que du html.

<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td>Le pseudo est&nbsp;: {PSEUDO}</td>
    <td>Adresse email&nbsp;: <a href="mailto:{EMAIL}">{EMAIL}</a></td>
  </tr>
</table>

Et maintenant, les explications. Commençons par le fichier test1.php.
Je passe sur les routines pour aller chercher les données dans la base de données, si vous lisez cet article, je pars du principe que vous savez vous y prendre.

$template = new Template('./');
On initialise la classe. La méthode Template prend comme argument facultatif le chemin vers les modèles. Ici, on indique que les modèles se trouvent dans le dossier courant
$template->set_filenames(array('body' => 'template1.tpl'));
on indique le modèle à utiliser, ici, template1.tpl, auquel on affecte le nom body
$template->assign_vars(array('PSEUDO' => $row['pseudo'], 'EMAIL' => $row['email']));
Le passage le plus important, on affecte les données aux variables qui se trouvent dans le fichier template1.tpl.
Littéralement; ça donne ça :
  • {PSEUDO} contiendra le contenu de la variable $row['pseudo']
  • {EMAIL} contiendra le contenu de la variable $row['email']
$template->pparse('body');
Le moteur de templates fait tous les traitements adéquats et affiche le résultat.

Voici ce que nous obtenons :

Résultat de notre test

Résultat il est vrai grossier, mais dù à la simplicité de l'exemple. A vous d'imaginer les possibilités d'un tel système. :-)

Les blocks

Imaginons maintenant que vous vouliez afficher non pas un pseudo et une adresse email mais deux ! Simple me direz vous, il suffit de rajouter une cellule en dessous de l'autre dans le fichier template1.tpl, comme ceci :

<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td>Le pseudo est&nbsp;: {PSEUDO}</td>
    <td>Adresse email&nbsp;: <a href="mailto:{EMAIL}">{EMAIL}</a></td>
  </tr>
  <tr>
    <td>Le pseudo est&nbsp;: {PSEUDO2}</td>
    <td>Adresse email&nbsp;: <a href="mailto:{EMAIL2}">{EMAIL2}</a></td>
  </tr>
</table>

Et d'affecter les valeurs correspondantes. Mais que faire lorsque on ne connait pas à l'avance le nombre de ligne pseudo/email que l'on va afficher ? C'est là que les blocs entrent en jeu.

Un bloc est une portion de code html comprise entre deux lignes de commentaires et qui sera affichée autant de fois que nécessaire.
Admettons que nous ne connaissons pas à l'avance le contenu de la table table_users. Voici ce qu'elle contiendra pour les besoins de l'exemple :

Données de la table table_users
id pseudo email
1 bobe bobe@domain.com
2 AllCoKe AllCoKe@domain2.net
3 toto toto@domain3.fr

Et maintenant, le fichier test2.php :

<?php
  include('template.php');

  $connect = mysql_connect('localhost', 'root', '');
  mysql_select_db('database', $connect);

  $result = mysql_query('SELECT pseudo, email FROM table_users');

  // on créé une nouvelle instance de la classe Template
  // et on indique en argument le chemin vers les modèles
  $template = new Template('./');

  // modèle à utiliser auquel on adjoint un nom arbitraire
  $template->set_filenames(array(
    'body' => 'template2.tpl'
  ));

  // Assignation des variables
  $template->assign_vars( array(
    'NB_USERS' => mysql_num_rows($result)
  ));

  //
  // Assignation des variables dans le block 'user'
  //
  while( $row = mysql_fetch_array($result) )
  {
      $template->assign_block_vars('user', array(
          'PSEUDO' => $row['pseudo'],
          'EMAIL'  => $row['email']

      ));
  }

  // Affichage des données
  $template->pparse('body');
?>

Et enfin, le modèle template2.tpl :

<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td colspan="2"> Il y a {NB_USER} membres </td>
  </tr>
  <!-- BEGIN user -->
  <tr>
    <td>Le pseudo est&nbsp;: {user.PSEUDO}</td>
    <td>Adresse email&nbsp;: <a href="mailto:{user.EMAIL}">{user.EMAIL}</a></td>
  </tr>
  <!-- END user -->
</table>

Le modèle template2.tpl pour commencer : Il contient à peu de choses près la même chose que dans l'exemple du premier paragraphe. Nous avons rajouté une cellule où nous indiquerons dynamiquement le nombre de membres présents dans la table table_users (variable {NB_USER}).
La différence essentielle est que nous avons défini le bloc user, et ceci à l'aide de lignes de commentaires. Schématiquement, un block est construit de cette façon :

<!-- BEGIN nom_du_block -->

Les différentes balises html qui constituent le bloc

<!-- END nom_du_block -->

Le commentaire de déclaration de début de bloc doit être seul sur sa ligne, de même que le commentaire de fin de bloc. Les variables incluses dans un bloc portent le nom du bloc comme préfixe, ici : {user.PSEUDO} et {user.EMAIL}.
Dans le fichier test2.php, nous avons assigné le résultat de mysql_num_rows($result) dans la variable {NB_USER}. Puis dans la boucle while, nous utilisons la méthode assign_block_vars, membre de la classe Template. Le premier argument de cette méthode est le nom du bloc concerné, ici user, le deuxième argument est le tableau contenant les variables du modèle et leur contenu.
A chaque passage dans la boucle, le bloc user est répété, avec les nouvelles valeurs qui sont assignées aux variables du modèle.
Voilà ce que ça donne :

Résultat de notre test

Les blocks imbriqués

Allons encore plus loin dans l'utilisation du système de templates et étudions le cas des blocks imbriqués.
Les blocks imbriqués impliquent quelques règles strictes à respecter :

Exemple d'imbrication incorrecte, les blocs se chevauchent :

Il y a {NB_USER} membres <br>
<table border="1" cellpadding="2" cellspacing="0">
  <!-- BEGIN user -->
  <tr>
    <td>Le pseudo est&nbsp;: {user.PSEUDO}</td>
    <td>Adresse email&nbsp;: <a href="mailto:{user.EMAIL}">{user.EMAIL}</a></td>
    <!-- BEGIN id -->
    <td>ID&nbsp;: {user.id.IDENTIFIANT}</td>
    <!-- END user -->
  </tr>
  <!-- END id -->
</table>

Exemple d'imbrication correcte, le bloc id est inclus dans le bloc user (template3.tpl) :

Il y a {NB_USER} membres <br>
<table border="1" cellpadding="2" cellspacing="0">
  <!-- BEGIN user -->
  <tr>
    <!-- BEGIN id -->
    <td>ID&nbsp;: {user.id.IDENTIFIANT}</td>
    <!-- END id -->
    <td>Le pseudo est&nbsp;: {user.PSEUDO}</td>
    <td>Adresse email&nbsp;: <a href="mailto:{user.EMAIL}">{user.EMAIL}</a></td>
  </tr>
  <!-- END user -->
</table>

Voici le fichier test3.php :

<?php
  include('template.php');

  $connect = mysql_connect('localhost', 'root', '');
  mysql_select_db('database', $connect);

  // cette fois, on récupère aussi l'id de la ligne.
  $result = mysql_query('SELECT id, pseudo, email FROM table_users');

  // on créé une nouvelle instance de la classe Template
  // et on indique en argument le chemin vers les modèles
  $template = new Template('./');

  // modèle à utiliser auquel on adjoint un nom arbitraire
  $template->set_filenames(array(
      'body' => 'template2.tpl'
  ));

  // Assignation des variables
  $template->assign_vars(array(
      'NB_USERS' => mysql_num_rows($result)
  ));

  // on récupère la variable $mode.
  $mode = $_GET['mode'];

  //
  // Assignation des variables dans le block 'user'
  //
  while( $row = mysql_fetch_array($result) )
  {
      $template->assign_block_vars('user',array(
          'PSEUDO' => $row['pseudo'],
          'EMAIL'  => $row['email']

      ));

      // Si mode contient la chaine display, on affiche l'id du membre.
      if( $mode == 'display' )
      {
          $template->assign_block_vars('user.id',array(
              'IDENTIFIANT' => $row['id']

          ));
      }
  }

  // Affichage des données
  $template->pparse('body');
?>

Le résultat si la variable mode, contenant display n'est pas passée dans l'url :

Résultat de notre test

Et si la variable mode, contenant display est passée dans l'url :

Résultat de notre test

Imbrication des templates

Vous pouvez avoir besoin d'insérer dans un modèle le résultat du traitement d'un autre modèle. Ceci est possible. Il vous suffit pour ça d'appeller la méthode assign_var_from_handle() au lieu de pparse().
Cette méthode prend deux arguments, le premier est le nom de la variable dans le modèle de destination, le deuxième est le nom que vous avez donné à votre autre modèle lors de l'appel à la méthode set_filenames().
Petit exemple :

<?php
  include('template.php');

  // on créé une nouvelle instance de la classe Template
  // et on indique en argument le chemin vers les modèles
  $template = new Template('./');

  // modèle à utiliser auquel on adjoint un nom arbitraire
  $template->set_filenames(array(
      'body' => 'template.tpl'
  ));

  //
  // On assigne les variables que l'on veut à notre modèle
  //

  // Deuxième modèle
  $template->set_filenames(array(
      'body2' => 'template2.tpl'
  ));

  //
  // On assigne les variables que l'on veut à notre modèle
  //

  //
  // On insère le résultat du modèle 'body2' dans le premier modèle
  //
  $template->assign_var_from_handle('RESULTAT_BODY2', 'body2');

  //
  // On affiche notre premier modèle la variable {RESULTAT_BODY2}
  // dans le modèle aura été remplacée par le résultat du
  // traitement du deuxième modèle
  //
  $template->pparse('body');
?>

Informations complémentaires

Vous pouvez télécharger les source de ce tutoriel (fichiers exemples…) ici.
De nombreux autre systèmes de templates existent, tels Smarty, Templeet ou encore Modelixe.

Article écrit le / Partiellement mis à jour le par Bobe
[87] commentairesTop

Des commentaires ?

Auteur : FX • 02/11/2002 @ 00:19 • #74

Que dire c'est nickel ce petit tuto sur les templates. :)

Auteur : iceman • 05/11/2002 @ 06:43 • #78

Le tuto est parfait mais bobe on pourrait avoir un tuto avec comme exemple la mise en place d'une application multilangue. ce serait trop cool...

Encore merci pour ce bon boulot.

Auteur : nico2002 • 10/12/2002 @ 21:28 • #120

Pour un tuto pr un site multilangue tu as [lien]

Auteur : Xenon_54 • 14/02/2003 @ 18:19 • #204

Très TRÈS bon tuto sur les templates, merci!

:d

Auteur : FX • 19/02/2003 @ 20:51 • #207

Iceman pour le multilanguage tu déclare dnas ton code phpbb qu'il doit exploiter des $lang...... correspondant au language de l'utilisateur (voir le système de phpBB pour ça).

Auteur : tuyauman • 03/03/2003 @ 15:12 • #233

Merci beaucoup pour ce tutorial grace auquel, j'ai enfin compris comment fonctionnent les templates :) merci encore

Auteur : ecoll • 18/03/2003 @ 22:50 • #252

Salut à tous et merci pour ces explications

j ai une petie question à vous poser
si je veux afficher les données (news) dans des tableaux séparés les uns des autre comment puis je faire ...
merci de vos reponce
++
ecoll

Auteur : julian • 09/04/2003 @ 01:38 • #276

Merci pour ce tutoriel est nickel ;)
Bon nempèche je voudrais génèrer une page HTML des résultats de la base de donné à une heure donnée !

avec la fonction PHP " fwrite() " je pensais faire un echo de la variable qui contenait le code Html interpreté : !
mais je nais pas réussis !

pouvez vous m'aider ???
merci

Auteur : Bobe • 09/04/2003 @ 22:22 • #277

la fonction fwrite() est utilisée pour ecrire dans un fichier. tu dois confondre avec autre chose.

Cet endroit est là pour laisser des commentaires, si tu veux de l'aide, va faie un tour sur le forum

Auteur : julio9 • 21/04/2003 @ 10:07 • #291

Bien vu ce petit tuto sur les templates... :D

Bonne continuation,

Auteur : Cyberal • 04/05/2003 @ 18:34 • #302

slt, je trouve ton tuto tres bien, j'en ai lut plusieurs sur les templates et la je pense que j'ai compris :-) manque plus qu'a fre les travaux pratique lol .
J'ai dl le .zip pour executer tes scripts et il y a une petite erreur qui n'est pas present sur dans le tuto.
Dans le .zip il y a :
pour les fic template2.tpl et template3.tpl
[code_php_disabled]

a la place de
[code_php_disabled]<span class="hl-keyword">{[code_php_disabled]<span class="hl-default">NB_USERS[code_php_disabled]<span class="hl-keyword">} [code_php_disabled]<span class="hl-default">membres?&gt;[code_php_disabled][code_php_disabled]</code></pre>

@++ et merci pour ce tres bon tuto

Auteur : J|ce • 09/05/2003 @ 15:44 • #304

Yep tuto très simple et bien foutu
par contre une grosse erreur impardonnable Bobe... bon c est une erreur de débutant donc avec de la pratique tu la feras plus j pense :D
t as oublié le "S" à NB_USER du template sur les blocks... ce qui fait que tout plante et que c est pas très bien programmé tout ca
ptain j suis trop fort je m aime

Auteur : Bobe • 10/05/2003 @ 01:12 • #307

Z'avez fini de m'enfoncer ouais ? :-p

j'ai fait les corrections dans le zip

Auteur : marKus • 05/08/2003 @ 11:47 • #387

kelle Star ce Bobe!!

Auteur : Moudu • 19/09/2003 @ 18:43 • #423

Merci, apres deux tutos mal faient j'ai enfin pigée grace au tien, thx

Auteur : Taliesin • 11/01/2004 @ 23:47 • #479

Salut,

D'abord merci pour ce magnifique tutorial.
J'aurais une question concernant l'imbrication de template. Est-il possible d'appeler $template->assign_var_from_handle deux fois ? Je m'explique : je cherche à afficher un menu et un contenu. Le premier appel affiche le menu et le second le contenu. Or il semble n'afficher que le menu. Y a-t-il donc moyen d'utiliser plusieurs fois l'imbrication ?
Merci et bonne continuation.

Auteur : xion • 04/02/2004 @ 22:10 • #498

Merveilleux tutorial !
Merci beaucoup.... pour celui-ci.

Auteur : webiser • 09/02/2004 @ 09:36 • #500

comment gérer les template conditionnelles ?
je m'explique : utiliser la template 1 si connecté sinon utiliser le template 2

car en ce moment j'utilise plutot les include tels que :
<?php if (session_is_registered('membre')){include ('include/header_membre.php');}
else {include('include/header2.php');}?>

Auteur : jaguar_fou • 24/02/2004 @ 14:19 • #512

Très bon tuto, je pouvais pas réver mieux. J'en ai perdu du temps à bidouiller dans phpBB avant de trouver cette page et de comprendre. Heureux que y'ait des gens comme toi qui perdent leur temps à faire des tutos pour éviter à des handicapés comme moi d'en perdre encore plus ;)

Bonne continuation

Auteur : sylbal • 22/03/2004 @ 18:04 • #533

Comme déjà dit maintes fois, tres bon tuto qui m'a permis d'apprendre à me servir des templates. Maintenant que j'ain un peu avancé, j'ai un pb pour faire un include dans le template :
page.php
<body>
<?
if (true) include ('true.php');
else include ('false.php');
?>
</body>

peut on envisager qq chose du genre :
page.php
<?
if (true) $sFile = 'true.php';
else $sFile= 'false.php';
...
'INCLUDE_FILE' => $sFile
Template.pparse(page)
?>

page.tpl
<body>
{INCLUDE_FILE}
</body>

Auteur : Nodashi • 21/04/2004 @ 19:35 • #544

Merci bcp

Auteur : irimi • 30/04/2004 @ 10:29 • #549

Quelqu'un saurait-il où trouver une doc complète de la syntaxe des templates de PHPBB ? Elle m'a l'air légèrement différente de celle de PHPlib, et bien plus pratique à utiliser pour les blocks notamment...

Merci.

Auteur : • 19/05/2004 @ 15:22 • #562

Je vais pas être super original... mais ton tutoriel est très simple et très bien conçu... un régal!

Auteur : Shepard • 21/05/2004 @ 22:05 • #565

Je suis ébahi par un tuto d'une telle qualité ! Depuis le temps que je cherchais à apprendre les templates, j'en ais vu des tutoriels, mais s'il y en a un que j'ai vraiment compris, c'est bien celui-ci ! Bravo à son auteur !!!

Auteur : Romanai • 02/06/2004 @ 15:24 • #576

Très bon tutorial sur les templates, merci a la personne qui l'a rédigé. Cependant, j'ai une question dont je n'ai trouvé la réponse dans aucun tutorial sur le net : Comment faire pour ecrire le flux html (qui va etre affiché dans la page) dans un fichier (code_genere.txt par exemple) que je pourrais envoyer par mail ensuite au format html ?

Si qqun a une idée de génie, je suis partant. Merci pour vos lumières.

Rom

Auteur : OniTalus • 09/06/2004 @ 21:24 • #583

Salut ;o)

Ton tuto sur les templates est tres sympa, mais j'esperais trouver de quoi faire, par exemple pour un afichage de pages d'un livre d'or, faire en sorte que lors du premier chargement, la page en cours soit deja selectionée ; je m'explique : Lorsque je charge la page pour la premiere fois, la page courante est dans le meme style que les autres pages, c'est seulement lorsque l'on clique sur une autre page que le script met en forme le numero de la page actuelle..... Bon, je sais, c'est confus :P

Auteur : huang • 14/06/2004 @ 14:10 • #586

salut!
je suis un débutant, comment savoir si j'ai "phplib " et à propos de "template.php" où est ce que je puisse l'avoir?

Auteur : Patricia • 27/06/2004 @ 00:07 • #595

En réponse à Irimi, et son message du 30 avril, il y a ce tuto sur phpbb pour l'utilisation des templates.

[lien]

A part ça, le tuto de Bobe, sur cette page, est génial et m'a bien aidée. merci :)

Auteur : nOOr • 10/08/2004 @ 13:09 • #610

C'est vraiment un super tutoriel !
Rien à dire, depuis le temps que je cherchais un bon tuto sur les templates en français...
Concis et complet : BRAVO !

Auteur : Sgt Taliesin • 20/11/2004 @ 11:21 • #630

Tutoriel monstrueux qui m'a permis de réaliser mon site entièrement en template. La souplesse de la librairie phpBB est grande malgré la claque qu'elle cause au processeur Apache. Il s'agit de la méthode la plus intuitive que je connaisse. Elle s'intègre parfaitement au code et permet une grande rigueur.
Bravo et merci.

Auteur : denisvignes • 14/01/2005 @ 17:01 • #646

merci pour ce tuto d'une grande clarté
je recomence mon site de A a Z

Auteur : XTreMinD • 30/03/2005 @ 00:56 • #667

excellent tuto merci bobe :)

Auteur : DarkMoox • 04/04/2005 @ 14:13 • #671

Très bon tuto mais j'ai un soucis, le code générer à partir du template ajoute des anti-slashes.

ex :

<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/style.css\" />

C'est génant

Euh C'est quoi la soluce merciiiiiiiiiiiii !

Auteur : DarkMoox • 13/04/2005 @ 14:43 • #674

Euh j'ai fait une modif dans le code pour virer ces fameux anti-slashes c'était le plus simple...

Auteur : myXtrem • 29/04/2005 @ 13:43 • #680

Ce tuto est bien fait mais il n'explique pas comment créer sa class template parce qu'il utilise seulement celle de phpBB.
Je voudrais créer ma class mais je ne sais pas comment faire avec les blocks

Auteur : eagle1792 • 05/05/2005 @ 18:35 • #683

Super tuto!

Juste un petit problème : chez moi les boucles s'affichent en double
(exemple : au lieu de mettre
*item 1
*item 2
*item 3

il met

*item 1
*item 2
*item 3
*item 1
*item 2
*item 3)
Quelqu'un sait d'où ça pourrait venir (ne me dites pas de mon code j'ai passé des heures à le vérifier gnnn ^^)

Auteur : biboum • 15/05/2005 @ 22:33 • #687

Bonjour,

J'ai une page qui contient un block. Les données du block sont issues d'une requête qui peut ne pas avoir de résultat.
Du coup, le bloc affiche le nom du block au lieu de ne rien afficher.

Par exemple, dans le PHP
$tpl->set_block('main', 'each_row', 'all_rows');

Dans mon HTML
<!-- BEGIN all_rows -->
mon code HTML
<!-- END all_rows -->

Le résultat donné
{all_rows}

alors qu'il ne devrait rien y avoir.
Comment y remédier?

Auteur : ellimac_zero • 18/05/2005 @ 15:39 • #688

ah ouais, ben maintenant, avec ton tuto, j'ai compris les templates :)

Auteur : alex • 05/07/2005 @ 10:37 • #702

Très bon tuto

Bonne continuation

Auteur : MaitreFolas • 23/08/2005 @ 19:42 • #714

JE SUIS DANS LA MERDE !!!!!

maintenant que j'ai compris faut que je recommence tout mon site !!!

MMEERRCCII ! :o))

Auteur : Logik Stik • 15/09/2005 @ 19:37 • #719

tres bon tuto mais comment faire pour afficher des résultat sur un nombre de colonne donné ?

Auteur : stef32 • 24/10/2005 @ 18:31 • #747

Aucun exemple ne contient d'apostrophe.(Par exemple "aujourd'hui").
Comment faire afficher des apostrophes ?
Je galère

Auteur : Albator • 25/10/2005 @ 14:38 • #750

"Aujourd\'hui"

Auteur : nicoprog • 04/11/2005 @ 21:55 • #756

Merci pour ce MERVEILLEUX article !

Je me suis interressé aux templates il y a quelques mois car je voulais faire un site avec un ami graphiste qui connaissait les templates, et c'est très pratique de travailler chaqu'un de son côté sur des fichiers différents !

Tout ça pour dire que grâce à cet article très clair et complet (énorme merci pour les templates imbriqués) j'ai compris sans problème le système :)

Encore bravo et MERCI pour cet article :)

Auteur : 6529jj • 10/12/2005 @ 11:21 • #765

Ce script n'a besoin d'aucune classe?

Auteur : pendragon509 • 03/01/2006 @ 09:43 • #782

Bonjour, Tout d'abord Bonne année et merci pour les tutos qui sont forts sympas.

Je voulais savoir si l'on pourvait rajouter des conditions (if,while,) et d'autres fonctions genre :include. Je sais que ces fonctions sont dans Smarty mais je voulais savoir s'il y avait équivalence. Merci

Auteur : Maximelene • 18/01/2006 @ 16:49 • #785

Moi qui cherchai depuis bien deux heures comment faire un système de templates, je suis servi !

Me reste plus qu'à trouver comment faire des conditions dans les templates (enfin comme je vais utiliser la librairie de PhpBB ça devrait aller :p).

Auteur : Kijer • 30/01/2006 @ 10:05 • #793

Bravo pour ton tuto clair et structuré, manque plus que une démo avec plusieurs pages pour la navigation à gérer.

Auteur : Bobe • 05/02/2006 @ 19:42 • #794

pendragon509 : De mon point de vue, ça n'a pas beaucoup d'intérêt. Si c'est pour recréer un langage de programmation, mieux vaut utiliser directement PHP, qui est lui-même au départ une sorte de système de templates (imbrication avec le HTML).

Auteur : Webdeb73 • 09/02/2006 @ 22:19 • #798

Tutoriel très intéressant qui va beaucoup me servir !!! Merci !

Par contre les apostrophes ne sont pas utiles dans la requête avant et après le 1 car ils sont destinés aux chaînes de caractères. Dans le cas d'ID (donc de nombres), ils doivent être retirés.

$result = mysql_query("SELECT pseudo, email FROM table_users WHERE id = '1'");

à replacer par :

$result = mysql_query("SELECT pseudo, email FROM table_users WHERE id = 1");

++

Auteur : Webdeb73 • 11/02/2006 @ 11:41 • #800

Salut !

Il manque aussi le mysql_close() dans les fichiers php après récupération des données.

++

Auteur : Dader • 08/03/2006 @ 01:52 • #828

g pas lu le tuto, mais il est vraiment trop bien :p... non, je plaisante, c vraiment pas mal, g enfin compris les template!!!!! ouaiiiiiiiiiiii :D
@++ les gens

Auteur : cpttarask • 21/03/2006 @ 15:02 • #845

Merci pour ce tuto! vraiment génial.

Auteur : FabHacker • 21/05/2006 @ 15:58 • #897

Très beau tutoriel, simple clair bref complet et en un seul mot: efficace !
Il devient aisé d'utiliser le module de template de PhpBB ce qui peut s'avérer très pratique pour la création d'un site multi-design.

De plus PhpBB offre la possibilité des multi-imbrications, ce que d'autre modules de templates que j'ai trouvé ne permettent pas...
En clair, c'est un très beau travail!

Bravo PhpBB, et à l'auteur du tutoriel ;-)

Auteur : • 02/06/2006 @ 13:52 • #978

super

Auteur : Palleas • 03/06/2006 @ 09:49 • #981

Bonjour =)

est il possible de repeter un bloc imbriqué dans un autre ?
genre
<!-- BEGIN bloc1 -->
<h1> toto {bloc1.id}</h1>
<!-- BEGIN bloc2 -->
{bloc1.bloc2.variable}
<!-- END bloc2 -->
<!-- END bloc1 -->

et je voudrais faire en sorte que ca fasse :
TOTO 1
variable
variable
variable
variable
variable
TOTO 2
variable
variable
variable
variable
variable
TOTO 3
variable
variable
variable
variable
variable

C'est jouable ?

MErci d'avance =)

Auteur : tsikomen • 21/06/2006 @ 15:30 • #1086

bravo et merci!

Auteur : CoolWaa • 22/06/2006 @ 11:42 • #1097

Coucou effectivement ce tuto est très bien et nous a beaucoup aidé sauf qu'il y a quelques erreurs. Mais bon ce n'est pas trop grave. Par contre j'aurai aimé savoir comment inclure un fichier tpl qui a une boucle dans une autre boucle qui est dans un autre fichier tpl et afficher le tout dans mon 3eme tpl de base...
un peu complexe, je bloque... mais ce tuto ma bien avancé, domage qu'il ne m'aide pas a aller au terme de mon projet... :D
bonne continuation et merci pour l'aide.

Auteur : arthur • 28/06/2006 @ 22:22 • #1128

Bonsoir,
il n'y a pas une erreur dans le premier schéma ? une inversion entre "moteur de template" et "script php' ?
A moins que j'ai mal compris.

Auteur : wasabi • 26/07/2006 @ 18:47 • #1326

Depuis l'année 2002 ça reste toujours un très très bon tuto. Clair, Progressif et Cartésien. Bravo et Merci, je commence à comprendre le templates HTML et peux faire d'autres choses maintenant.

Auteur : aramis • 30/07/2006 @ 22:33 • #1354

Bonjour à vous tous... sa l'air à marcher pour tout le monde mais pas pour moi^^

J'ai cette erreur qui s'afficher :

Warning: include(template.php) [function.include]: failed to open stream: No such file or directory in /usr/home/users/be/downuser/www/awardshp.to.md/index.php on line 3

Warning: include() [function.include]: Failed opening 'template.php' for inclusion (include_path='.:') in /usr/home/users/be/downuser/www/awardshp.to.md/index.php on line 3

Fatal error: Class 'Template' not found in /usr/home/users/be/downuser/www/awardshp.to.md/index.php on line 15

Auteur : Jeremie78 • 04/08/2006 @ 22:42 • #1365

super ce tuto
vraiment génial !!

Auteur : Vincent • 19/08/2006 @ 17:09 • #1630

Depuis le début du mois, j'essais de comprendre PWG (très bonne gallerie [lien]) qui utilise les Templates.

Je n'en ai jamais entendu parlé avant, et grace à ce tutoriel, tout est plus clair.

Merci,

Vincent.

Auteur : Baygon • 05/09/2006 @ 09:57 • #2018

Vos liens connexes semblent down ... :-|

Auteur : Sam1er • 11/09/2006 @ 21:25 • #2125

Génial! Merci :)

Auteur : Smile' • 19/09/2006 @ 21:57 • #2221

Très très bien expliqué ! Un grand merci à toute l'équipe de ce site :-)

Auteur : lezao • 10/10/2006 @ 11:37 • #2348

c'est pas mal !
Mais je me pose une question ?
On dit que le principe est de séparer le code php de la mise en page html.

Mais si je cree ma page php et que je met un include(mapage.php) dans ma page html, puis que j'appelle mes variables avec un <? echo $mavar ; ?> de facon a separer mon code php de ma mise en page html ?

quelle est l'avantage de ce systeme de template ? par rapport a mon systeme ?

Auteur : BiSi2poche • 10/10/2006 @ 22:46 • #2350

Bonsoir,

J'en rajouterais un peu à la question de lezao en m'appuyant sur un article (http://www.massassi.com/php/articles/template_engines/) qui montre comment créer une petite classe de gestion de template basée sur le php.
Comme le dit l'auteur, il est (presque) aussi simple d'écrire dans un template <?=$mavar?> que {#MA_VAR} (ou autre écriture du genre). (d'autant plus que ca laisse la liberté de faire de l'affichage conditionnel par exemple, comme quelqu'un en a parlé plus haut et comme il en existe dans le système de gestion de template de Invision)

Certe l'intêret de l'article n'est pas, avant tout, de venter les mérites des systèmes de templates en vogue (et de leur syntaxe particulière). Mais j'avoue que je me pose aussi cette question (à part un soucis de sécurité si des tiers sont ammenés à accéder aux templates comme pour un forum).

En tout cas, merci pour cet article clair et instructif qui m'a aidé à avancer un peu plus vite.

Auteur : DHX • 23/11/2006 @ 00:31 • #2547

Très bon tuto clair et précis.
Merci

Auteur : HiSy • 15/12/2006 @ 08:09 • #2684

Super Tuto ... mais les liens de la rubrique Info Complémentaires sont morts ...
Dommage ... Les 2 m'interressaient ..

Auteur : Zenerox • 30/03/2007 @ 10:44 • #3754

Très bon tuto! Cependant j'ai un petit probleme. Que contient la page template.php?
Est elle dans smarty? Si oui j'ai un autre probleme: impossible de dl smarty. Il n'y a plus de liens sur leur site pour le faire.
La page template.php est elle indispensable?

Auteur : aZ • 13/04/2007 @ 13:47 • #3986

Le fichier "template.php" est indispensable et se trouve dans le fichier zip des fichiers d'exemple. Tu n'as besoin que de celui-ci. Tu le places à un endroit de ton site, et tu l'inclus dans chacun de tes scripts (enfin, au moins ceux pour lesquels tu souhaites générer une présentation html). Tu ne dois surtout pas éditer ce fichier, même si tu as, lors de l'execution de tes scripts, un message d'erreur indiquant une erreur dans le fichier template.php. Il s'agira d'un problème de déclaration de tes variables.

Auteur : crusty8x • 04/05/2007 @ 11:50 • #4747

salut, merci pour ce tuto il est simplement parfait.
je cherche à mettre en place un multilangues pour une appli php.
Je sais que l'on a déjà demander et qu'un lien a été donné mais j'y cromprends rien du tout !!!
merci de votre aide !! (enfin si vous pouvez)

Auteur : Arcanis • 05/06/2007 @ 17:01 • #5794

Pour ceux qui sont interessés, WebZrchives possède les trois articles.

[lien]

Auteur : x064 • 07/10/2007 @ 09:12 • #11394

trés claire, et bien expliqué , Bravo

ça m'as été très utile , Merci

Auteur : • 06/11/2007 @ 18:00 • #15830

Merci pour le tuto

Auteur : wilo • 19/02/2008 @ 21:23 • #45980

merci pour le tuto ! Même si je n'ai pas encore compris les imbrications de templates...

Auteur : Cclleemm • 28/03/2008 @ 13:24 • #49810

Merci pour ce tuto qui me sera très utile ! BRAVO
Mais j'ai une question, si a la place d'afficher le template avec $template->pparse('body');
on désire enregistrer ce contenu dans une variable, comment fait t'on ?
En gros faire ceci :
$mavariable=$template->pparse('body'); //(mais ça ne marche pas)

Auteur : magicbusy • 28/05/2008 @ 09:44 • #59277

Bravo pour le tuto.

Petit complément pour faire des templates conditionnelles:

Elle est expliquée ici:

[lien]

et ca marche très bien.

Bonne journée

Auteur : dephazz • 06/09/2008 @ 02:42 • #89131

bonjour
je cherche un tuto qui montre comment ajouter un lien sur les titres d'article dans un menu vertical , afin d'afficher le commentaire dans la zone contenu.

Auteur : BetFish.com • 26/11/2008 @ 22:33 • #105207

Cool , j'ai exam demain matin la dessus,

Auteur : burnedsyn • 02/12/2008 @ 12:00 • #105432

En réponse a Cclleemm tu dois utiliser la bufferisation de sortie avec les fonctions

ob_start();
ob_get_contents();
ob_end_clean();

donc tu aurais quelquechose comme
ob_start();
$template->pparse('body');
$mavariable=ob_get_contents();
ob_end_clean();
echo $mavariable;

Voila j'espère que cela t'aide un peu ;)
Tim

Auteur : koulou • 24/01/2009 @ 13:38 • #108101

Merci Bobe le pedagogue ! C'est limpide !

Auteur : malika • 02/02/2009 @ 11:55 • #108419

slt j'ai trouve votre leçon tres important mais j s pas comment j px utilises ts ca pratiquement......j'attend votre reponse car j'ai 1 exposee sur ce terme merci

Auteur : 8090 • 20/02/2009 @ 22:53 • #110043

merci

Auteur : vaillanthero • 02/04/2009 @ 12:53 • #112452

Convaincu de votre recherche approfondie sur les templates. thanks

Auteur : taz • 18/06/2010 @ 15:43 • #120064

Bonjour, effectivement très bon tuto toujours utile même à cette date. Par contre je me posais une question si jamais quelqu'un passe par ici : comment récupérer les données envoyés dans un tpl pour les afficher sur une page? J'ai chercher sur Google mais pas trouvé de réponse. En utilisant $_POST cela ne marche pas, je ne sais pas si cela est possible mais si jamais quelqu'un a la réponse je suis preneur :)

Déposer un commentaire

Pseudo, Email et Options

Tapez votre commentaire

Note : Vos données personnelles restent strictement confidentielles et ne sont pas réutilisées à votre insu. Vous pouvez consulter à ce propos cette page.

Valid HTML Valid CSS Mozilla et Firebird ipv6 ready