IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[PHPLIB] Blocs imbriqués


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 2
    Points
    2
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <!-- BEGIN salon -->
    le salon {nom_salon}
    <!-- BEGIN forum -->
    le forum {nom_forum}
    <!-- END forum -->
    <!-- END salon -->

    PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 2
    Points
    2
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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');

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Super! J'avais le même problème et je ne comprenais pas pourquoi ca me le faisait!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire des blocs imbriqués
    Par kousteau dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 26/08/2014, 16h08
  2. [VI-2003] Faire des blocs imbriqués
    Par yolepro dans le forum Visio
    Réponses: 4
    Dernier message: 25/08/2010, 22h19
  3. Blocs imbriqués et transmission de variable
    Par Shampra dans le forum PL/SQL
    Réponses: 8
    Dernier message: 10/05/2010, 11h03
  4. [PHPLIB] Blocs conditionnels
    Par Artusamak dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 01/11/2006, 22h57
  5. [phplib] Affichage avec blocs imbriqués
    Par elcoyotos dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/10/2006, 20h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo