Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] pages en plusieurs parties

Posted by plegall on 04/17/2007 09:49

Bonjour,

Je souhaite connaître la "bonne pratique" avec jTPL pour fabriquer des pages constituées de plusieurs parties. Assez classiquement, j'ai un header, un main et un footer.

Dois-je utiliser des {include 'header.jtpl'} ou bien faire 3 $tpl->display('header.jtpl'), $tpl->display('main.jtpl') et $tpl->display('footer.jtpl') dans le code PHP ?

Vos conseils sont les bienvenus avec un petit exemple d'implémentation pour que ce soit bien clair pour moi (et pour les autres qui se poseraient la même question) :-)

  [Opened] Re: pages en plusieurs parties

Reply #1 Posted by laurentj on 04/17/2007 10:34

Bonjour,

Je pense que l'utilisation du tag include semble plus logique.

Une autre façon de faire, ce serait d'avoir un main.tpl qui contient directement le header et le footer, et qui ferait un {include $principal} où 'principal' est une variable contenant le nom du template à utiliser pour le contenu principal..

  [Opened] Re: pages en plusieurs parties

Reply #2 Posted by plegall on 04/17/2007 18:34

Bonjour Laurent,

Peux-tu donner un exemple de template utilisant un {include $principal} avec le code PHP associé ?

  [Opened] Re: pages en plusieurs parties

Reply #3 Posted by plegall on 04/17/2007 19:31

Je viens de faire un petit test, et il semble que {include 'header.php'} revienne quasiment au même que de faire cet include dans le code PHP.

 <?php
 // code of include/header.php
 $tpl = new jTpl();
 $tpl->assign('title', 'Main title');
 $tpl->display('header.tpl');
 ?>

 <?php
 // code of exemple.php
 define('JTPL_TEMPLATES_PATH', './');
 include './jtpl/jtpl_standalone_prepend.php';

 $tpl = new jTpl();
 $tpl->assign('titre', 'Ceci est un test !');
 $tpl->display('exemple.tpl');
 ?>

 <!-- header.tpl -->
 <h1>Header {$title}</h1>

 <!-- exemple.tpl -->
 {include 'include/header.php'}
 
 <h2>{$titre|upper}</h2>

Par contre, si je fais un {include 'header.tpl'} dans le code, si j'ai un {$title} dans header.tpl et un {$title} dans exemple.tpl, alors il n'y en plus qu'un (ce qui peut se comprendre), bref une espèce de fusion de "l'espace de nom".

On peut donc également gérer l'include dans le code PHP:

 <?php
 // code of include/header.php
 $tpl = new jTpl();
 $tpl->assign('title', 'Main title');
 $tpl->display('header.tpl');
 ?>

 <?php
 // code of exemple.php
 define('JTPL_TEMPLATES_PATH', './');
 include './jtpl/jtpl_standalone_prepend.php';
 
 include('include/header.php');
 
 $tpl = new jTpl();
 $tpl->assign('titre', 'Ceci est un test !');
 $tpl->display('exemple.tpl');
 ?>

 <!-- header.tpl -->
 <h1>Header {$title}</h1>

 <!-- exemple.tpl -->
 <h2>{$titre|upper}</h2>

(plus de include dans le template, mais dans le code PHP uniquement).

A titre personnel, je trouve pas mal de faire l'include de header.php dans le template.

  [Opened] Re: pages en plusieurs parties

Reply #4 Posted by plegall on 04/18/2007 09:40

Sauf que petit problème, si je veux faire {include 'header.php'}, il va chercher header.php dans le répertoire des templates défini par la constante JTPL_TEMPLATES_PATH (je vais devoir trouver la parade)

  [Opened] Re: pages en plusieurs parties

Reply #5 Posted by laurentj on 04/18/2007 10:34

Personnellement, je trouve que ce mélange d'usage d'include jTpl et d'include php est plutôt sale, et même complexe. Je préconiserai plutôt ceci :

Voici le template que tu utiliserais pour toutes tes pages

 <!-- page.tpl -->
  <!-- ici le header --> 
  <html> ..... <body> .... 
  <div id="header">...
   <h1>{$pagetitle}</h1>
  </div>
 
  <!-- contenu principal -->   
  {include $principal}
 
  <!-- footer -->
  <div id="footer"> ....
  </html>

Voici le code php

 <?php
 define('JTPL_TEMPLATES_PATH', './');
 include './jtpl/jtpl_standalone_prepend.php';
 
 $tpl = new jTpl();
 $tpl->assign('pagetitle', 'Ceci est un test !');
 
 // pour la page courante, on indique le sous template principal truc
 // on peut indiquer un autre sous-template en fonction de ce que 
 // l'on veut afficher bien sûr
 $tpl->assign('principal','truc.tpl');
 
 // on n'oublie pas les assignations pour truc.tpl
 $tpl->assign('foo','bar');
 
 // affichage de la page complete
 $tpl->display('page.tpl');
 ?> 

et après tu as donc un template truc.tpl pour la page truc, machin.tpl pour la page machin etc...

  <!-- truc.tpl -->
  <p>{$foo}</p>

  [Opened] Re: pages en plusieurs parties

Reply #6 Posted by plegall on 04/18/2007 12:33

OK, dans ce cas il faut que je fasse bien attention à ne pas utiliser de variables de template utilisant le même nom entre page.tpl et truc.tpl (je devrais y arriver).

  [Opened] Re: pages en plusieurs parties

Reply #7 Posted by laurentj on 04/18/2007 13:27

oui ça peut être un inconvénient. Une astuce : prefixer les variables de templates qui fasses partie de page.tpl par un même préfixe. "p_xxx" par exemple.

 
Page
  1. Re: pages en plusieurs parties