GAGA Template

XLetter

V4 : include dynamique buggé ?

Vous devez être inscrit et connecté pour pouvoir écrire dans les forums

Page : 1
Lolo19 Posté le 23/01/2008 22:34 - #


Membre
4 messages
28 ans
Bonjour,

J'essaye de faire un include dynamique, j'ai eu beau parcourir tout le forum , mais je n'ai rien trouvé de concluant. Tout le monde parle de la v3. Bref, voici mon code source :

index.php

include('libs/gaga.class.php');
$tpl = new gagatemplate();
$tpl->cache = false;

$tpl->assign('page','news.tpl') ;

$tpl->parse('index.tpl') ;
 


index.tpl

<div id="content" style="width:70%;background-color:#FFAFDD">
        <include file="{page}">
</div>
 


news.tpl

Bonjour, comment ca va ?
 


J'obtiens systématiquement l'erreur php suivante :

Warning: md5_file(templates/) [function.md5-file]: failed to open stream: No such file or directory in C:\www\dark\libs\gaga.class.php on line 121
GagaTemplate error :
le fichier templates/ n'exite pas !

Et pourtant le fichier existe bien !

Bug ou pas ? en tout cas si quelqu'un a une solution je suis grandement intéressé

aurao Posté le 24/01/2008 16:51 - #


Membre
5 messages
je sais pas si ça viens de là, mais quoi qu'il en soit, tu as oublié le "$" dans le nom de ta variable de ton include dynamique => file="{$page}"

Lolo19 Posté le 24/01/2008 17:53 - #


Membre
4 messages
28 ans
Bonjour,

Je ne crois pas qu'il faille utilisé le $ pour utiliser les variables dans la v4. Je ne suis pas chez moi donc je ne peux pas tester. Mais en regardant la doc on vois bien pour les variables qu'il faut utiliser {var}

Lolo19 Posté le 25/01/2008 00:34 - #


Membre
4 messages
28 ans
Bonsoir,

Bon je crois que j'ai trouvé d'où venait l'erreur. En fait le problème se situe dans la fonction parse_vars(...) qui ajoute de nouveau des balises d'ouverture php.

En effet lorsqu'on fait un include dynamique de ce type : <include file="{page}"> le système parse d'abord les includes en utilisant la fonction parse_include(...).
Notre ligne
<include file="{page}">
devient alors
<?php $this->parse("{page}"); ?>

Puis le système parse les variables en appelant la fonction parse_vars
Notre ligne
<include file="{page}">
devient alors
<?php $this->parse("<?php echo $page; ?>"); ?>

On voit bien les balise <?php ?> en double, et bien évidemment ça provoque une belle erreur php. Je vous propose un palliatif qui consiste à transformer les parse("{page}") en parse("$page"). Ainsi la variable page n'est plus remplacée par un <?php echo $page; ?> vu que c'est une variable déjà parsée.


private function parse_vars($c) {
$c = preg_replace('`\[(\S+)\]`U', '[\'\1\']', $c);
               
//Parse en 1er les variables dans les include de page dynamique
$c = preg_replace('`parse\("'.preg_quote($this->bal['var'][0]).'(\S+)'.preg_quote($this->bal['var'][1]).'"\)`isU', 'parse("$\1")', $c);  
               
$c = preg_replace('`'.preg_quote($this->bal['var'][0]).'(\S+)'.preg_quote($this->bal['var'][1]).'`isU', '<?php echo $\1; ?>', $c);

return $c;
}
 


Voilà chez moi ca marche nickel , avec 1, 2, plein d'include dynamique. Par contre ya surement une meilleure solution que d'ajouter une regexp. Mais bon n'étant pas un pro des expression régulière j'ai préférée faire simple

en espérant avoir fait avancer le schmillblik

gaga26 Posté le 25/01/2008 19:55 - #



741 messages
18 ans
Salut,

tu utilises mal la balise include, c'est tout, pas besoin de modifier ma classe...
<div id="content" style="width:70%;background-color:#FFAFDD">
        <include file="$page">
</div>

Lolo19 Posté le 25/01/2008 20:50 - #


Membre
4 messages
28 ans
Lut,

Ah ok, au temps pour moi, je n'avais pas du tout pensé à cette manière de faire. Je voulais absolument passer par une variable {page} mais c'est vrai quand utilisant $page, le parsing ne modifie pas la variable et tout est ok.

Pourquoi chercher compliqué quand on peut faire simple hein !

Merci en tout cas!

gaga26 Posté le 25/01/2008 21:25 - #



741 messages
18 ans
Je vais d'ailleurs rajouter ça à la doc car ce n'est pas très clair en effet.

smurf Posté le 08/12/2008 13:57 - #

Membre
1 message
Salut tout le monde,
J'ai eu globalement un problème similaire sur l'inclusion dynamique sur la version 4.2.

dans le fichier gaga.class.php dans la méthode parse_include_callback j'ai du modifier

if(strpos($m[1], '$')==1)
 

par

if(strpos($m[1], '$')==0)
 

Sans cette modification, le template n'était pas inclu. Est-ce normal ?

gaga26 Posté le 08/12/2008 19:18 - #



741 messages
18 ans
En effet, c'est une erreur de ma part, ça sera corrigé pour la 5.0. Merci du report.

Page : 1

Vous devez être inscrit et connecté pour pouvoir écrire dans les forums

Retour au forum Rapport de bugs, à la liste des forums, ou au haut de page