Version actuelle
0.8.4.2
 

Forums

Un problème, une idée d'amélioration ?
C'est ici que ça se passe !

You are not logged in.

Announcement

Suivez l'actualité du développement de Hyla sur son blog : http://blog.hyla-project.org/
  • Index
  •  » Aide
  •  » !include et !import dynamiques ?

#1 2010-09-28 14:12:55

levulcain
Membres
Registered: 2010-09-28
Posts: 4

!include et !import dynamiques ?

Bonjour ,

depuis longtemps a la recherche d'un moteur de template capable de remplacer celui de PHPBB2 que j'utilise habituellement j'ai entrepris d'adapter un petit site intranet pour qu'il utilise Hyla_tpl a la place du template PHPbb2 .

comme la syntaxe est approchante , j'ai réussi a traduire a peu pres tout a grand coups de recherche/remplace .

il me reste cependant un point de bloquage :
impossible de charger dynamiquement un morceau de template a partir du code php :

Code:

<?php // test.php

$rubrique = (!empty($_GET['rubrique'])) ? $_GET['rubrique'] : 'main' ;
require_once ('hyla_tpl.class.php');
$tpl = new Hyla_Tpl('.');
$tpl->importFile('hello','hello.tpl');
$tpl->setVar('include',$rubrique.'.tpl');
$tpl->setVar('import','./'.$rubrique.'.tpl');
echo $tpl->render();
?>

Code:

<!-- hello.tpl -->
{!include:$include}
{!import:$import}

Code:

<!-- main.tpl -->
<h1>hello</h1>

Hyla_Tpl error : File "./$include" not found !

l'import n'affiche rien  ...

EDIT 1 :
j'ai contourné le problème provisoirement avec quelque chose comme ça :

Code:

<?php
$nomFichier = (!empty($_GET['rubrique'])) ? $_GET['rubrique'] : 'main' ;  
$tpl->setVar('file',file_get_contents('./'.$nomFichier.'.tpl'));
?>

Code:

{$file}

mais j'aurais préféré pouvoir utiliser les fonctions internes du moteur de Template .

EDIT 2 :
la solution précédente  ne suffit pas : les blocs ne fonctionnent pas !!

Last edited by levulcain (2010-09-28 15:49:54)

Offline

 

#2 2010-09-28 15:57:48

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: !include et !import dynamiques ?

Salut,

en effet, il n'est pas possible de faire des import et des include dynamique, à vrai dire, j'en vois pas l'intérêt, la syntaxe à utiliser est la suivante :

Code:

$tpl = new Hyla_Tpl('.');
$tpl->importFile('hello','hello.tpl');
$tpl->importFile('main','main.tpl');

// Récupère le contenu du fichier main.tpl et le met dans la variable rubrique
$tpl->setVar('rubrique', $tpl->render('main:'));

[...]

Code:

Rubrique :
{$rubrique}

Voilà pour le principe.

++

Offline

 

#3 2010-09-28 16:59:15

levulcain
Membres
Registered: 2010-09-28
Posts: 4

Re: !include et !import dynamiques ?

Merci ,
je suis bien d'accord qu'un template devrais toujours rester passif : c'est a  la page PHP de gérer ça ...

cette méthode est très bien : je n’avais pas compris  qu'en ne précisant pas de block en particulier le setVar importait tout ( render('main:') au lieu de render('main:line') ) .

mais pour le coups le problème se pose de gérer le template principal avec setCurrentFile , non ?

parce que si j’applique ça bêtement ça donne un résultat bizarre :
avec ces trois sources il s'affiche deux fois le titre Hello et pas du tout le mot rubrique...


Code:

<?php
require_once ('hyla_tpl.class.php');
$tpl = new Hyla_Tpl('.');

$tpl->importFile('hello','hello.tpl');
$tpl->importFile('main','main.tpl');

$tpl->setVar('rubrique', $tpl->render('main:'));

echo $tpl->render();
?>

Code:

<h2>rubrique  :</h2>
{$rubrique}

Code:

<h2>Hello</h2>

par contre si j'ajoute un setCurrentFile('hello');  ou un setCurrentFile('main '); avant ou après le setVar , là , ça n'affiche plus rien du tout ... hmm

là je sèche encore ... je suis un peu lent à la comprenette cette aprés-midi , moi  smile

Last edited by levulcain (2010-09-28 16:59:32)

Offline

 

#4 2010-09-28 21:04:26

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: !include et !import dynamiques ?

levulcain wrote:

Merci ,
je suis bien d'accord qu'un template devrais toujours rester passif : c'est a  la page PHP de gérer ça ...

cette méthode est très bien : je n’avais pas compris  qu'en ne précisant pas de block en particulier le setVar importait tout ( render('main:') au lieu de render('main:line') ) .

Non, le setVar importe rien du tout, c'est le render qui importe tout.


Voici le bout de code qu'il te faut :

Code:

<?php

require_once ('hyla_tpl.class.php');
$tpl = new Hyla_Tpl('.');

$tpl->importFile('hello','hello.tpl');
$tpl->importFile('main','main.tpl');

$tpl->setVar('rubrique', $tpl->render('hello:'));

echo $tpl->render();

Tu remarques que le setCurrentFile n'est pas nécessaire car il est fait automatiquement sur le dernier fichier importé

Tu aurais également pu écrire :

Code:

<?php

require_once ('hyla_tpl.class.php');
$tpl = new Hyla_Tpl('.');

$tpl->importFile('main','main.tpl');
$tpl->importFile('hello','hello.tpl');

$tpl->setVar('rubrique', $tpl->render('hello:'));

echo $tpl->render('main:');

ou encore :

Code:

<?php

require_once ('hyla_tpl.class.php');
$tpl = new Hyla_Tpl('.');

$tpl->importFile('main','main.tpl');
$tpl->importFile('hello','hello.tpl');

$tpl->setCurrentFile('main');

$tpl->setVar('rubrique', $tpl->render('hello:'));

echo $tpl->render();

voila, ++

Offline

 

#5 2010-09-28 22:04:17

levulcain
Membres
Registered: 2010-09-28
Posts: 4

Re: !include et !import dynamiques ?

merci : j'ai compris ! smile

du coups ça laisse pas mal le choix pour ordonner les tpl ...

qu'est-ce que tu recommande : un seul render a la fin ou  des renders successifs ...

est-ce qu'on doit considérer comme une bonne pratique de préciser systématiquement le setCurrentFile ?

et une dernière question : est-ce que tout cela a une incidence sur les performances ?

en tout cas , bravo pour cette classe qui est exactement ce que je cherchait :
moins verbeuse que phplib/phpbb2 tout en étant plus puissante et plus rapide visiblement .

Offline

 

#6 2010-09-29 01:15:58

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: !include et !import dynamiques ?

levulcain wrote:

merci : j'ai compris ! smile

du coups ça laisse pas mal le choix pour ordonner les tpl ...

qu'est-ce que tu recommande : un seul render a la fin ou  des renders successifs ...

Le render global à la fin me semble pas mal.

levulcain wrote:

est-ce qu'on doit considérer comme une bonne pratique de préciser systématiquement le setCurrentFile ?

Non, car ça réduit la lisibilité dans le code, tant qu'à faire, autant ordonner son code correctement pour éviter trop d'appel à cette fonction mais ça reste vraiment un souci de lisibilité car ça ne changera rien aux performances.

levulcain wrote:

et une dernière question : est-ce que tout cela a une incidence sur les performances ?

Comme vu au dessus, absolument pas

levulcain wrote:

en tout cas , bravo pour cette classe qui est exactement ce que je cherchait :
moins verbeuse que phplib/phpbb2 tout en étant plus puissante et plus rapide visiblement .

Content que ça te plaise !
++

Offline

 

#7 2010-09-29 09:30:56

levulcain
Membres
Registered: 2010-09-28
Posts: 4

Re: !include et !import dynamiques ?

merci .

Je suis moi-même ravi d'être un "early adopter" ...  big_smile
en attendant qu'un énoooorme communauté se forme  autour d'hyla_tpl smile

Offline

 
  • Index
  •  » Aide
  •  » !include et !import dynamiques ?

Board footer

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson