Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Templates > phplib et phpBB
phplib et phpBB Forum d'entraide sur les moteurs de templates phplib et phpBB. Avant de poster -> FAQ gabarits phpBB2, Cours phpBB2 et Sources phpBB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2007, 21h34   #1
Invité de passage
 
Inscription : novembre 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 2
Points : 1
Points : 1
Envoyer un message via MSN à manugatlin
Par défaut [phplib] Blocs imbriqués

Bonjour à tous,
je me joins à vous car je suis vraiment à bout d'un petit souci causé par mon script.
Voici mon problème :
j'ai un bloc imbriqué dans un autre du style

HTML :
Code HTML :
1
2
3
4
5
6
<!-- BEGIN salon -->
le salon {nom_salon}
<!-- BEGIN forum -->
le forum {nom_forum}
<!-- END forum -->
<!-- END salon -->

PHP :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
$tpl->set_block('index','forum','for');
$tpl->set_block('index','salon','sal');
if(test)//s'il y a des salons 
{
   while(test)//parcours resultat bdd
   {
    $tpl->set_var('salon', $data['salon']);
      if(test)//s'il y a des forums
      {
         while(test)//parcours resultat bdd
         {
            $tpl->set_var('forum', $data['forum']);
             $tpl->parse('for','forum',true);
         }
        }
      }
      $tpl->parse('sal','salon',true);
   }
$tpl->pparse('affichage','index');
RÉSULTAT INATTENDU :
en fait seul le premier salon est correct et contient les bons forum. Après le salon contient les forums du salon précédent + ces propres forums s'il existent

En gros le parse "sauvegarde" les modifications antérieures ... bizarre je comprends rien
Je vous remercie vraiment si vous pouvez m'aider, j'ai tenté d'être le plus clair possible en abrégeant le code et le simplifiant.
A bientôt.
manugatlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 11h53   #2
Invité de passage
 
Inscription : novembre 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 2
Points : 1
Points : 1
Envoyer un message via MSN à manugatlin
Par défaut problème résolu

Je suis trop content le problème est résolu, j'ai trouvé la réponse sur le blog :
http://www.bertrand-soulier.com/2005...et-une-astuce/

voici l'extrait de la solution :
$t->set_var("for",""); // ligne à ne pas oublier sous peine de surprise !!!

Elle tient au fait que vous avez 2 boucles imbriquées. Cette ligne affecte une valeur nulle au block ITEM. Ce nettoyage permet de vider la valeur, qui sans cette ligne suivrait dans la boucle suivante. Pour faire un test, essayez d’enlever cette ligne. Pour la première catégorie cela ne change rien, mais dans la deuxième, vous obtenez les liens de la deuxième catégorie mais aussi ceux de la première qui ont suivis. Si vous aviez 3 catégories, la troisième afficherait les liens de la première, de la deuxième et bien sûr ceux de la troisième. [ .. ]
Je connais certains développeurs qui ont passé leur week-end sur ce problème, surtout que la documentation de la Phplib ne mentionne pas du tout cette astuce.

explication
il faut donc avant la boucle qui permet de générer les lignes de forums ( bloc imbriqué : FORUM) vider la valeur du bloc forum afin qu'au prochain passage (de la boucle qui génére les salons ( bloc SALON) celle-ci soit vidée et ne contiennent pas la valeur du précédent passage.

Conclusion :
J'espère avoir été clair, vous pouvez faire un tour sur son blog c'est très bien expliqué

Correction du code php :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...
$tpl->set_block('index','forum','for');
$tpl->set_block('index','salon','sal');
if(test)//s'il y a des salons 
{
   while(test)//parcours resultat bdd
   {
    $tpl->set_var('salon', $data['salon']);
      /*
CORRECTION ICI : avant de rentrer dans la boucle de création des forums, on purge le bloc
     */
      $tpl->set_var('for', '');
      if(test)//s'il y a des forums
      {
         while(test)//parcours resultat bdd
         {
            $tpl->set_var('forum', $data['forum']);
             $tpl->parse('for','forum',true);
         }
        }
      }
      $tpl->parse('sal','salon',true);
   }
$tpl->pparse('affichage','index');
manugatlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2010, 13h25   #3
Candidat au titre de Membre du Club
 
Inscription : février 2006
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 41
Points : 12
Points : 12
Super! J'avais le même problème et je ne comprenais pas pourquoi ca me le faisait!
47-47 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h55.


 
 
 
 
Partenaires

Hébergement Web