Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mon moteur de templates

probleme recuperation et passage du nom du bloc

Sujet résolu
    12 janvier 2006 à 20:18:39

    Bonsoir à tous :)

    J'ai commencé à coder un moteur de templates, qui m'a l'air de bien marcher sauf à un endroit ou ça plante, et quand meme super important :D : la recuperation des données relatives à un bloc.

    Voici donc le code de la fonction qui est chargé de cette tache.
    function compile_bloc(&$bloc_line)
            {
                 //On recupere le nom du bloc que l'on va traiter
                 $bloc_name = preg_replace("!<bloc name='(.+)'>!s", '\1', $this->tpl_cache[$bloc_line]);

                    ++$bloc_line;
                    //On rassemble toutes les lignes du bloc dans une même variable
                 while(!preg_match('!</bloc>!ies', $this->tpl_cache[$bloc_line]))
                 {
                      $bloc .= $this->tpl_cache[$bloc_line];
                      ++$bloc_line;
                 }
                 
                 $bloc = $this->generate_bloc_data($bloc, $this->tpl_data_bloc[$bloc_name]);
                 
                 return $bloc;
            }


    Et c'est precisement à cette ligne que ça plante :
    $bloc = $this->generate_bloc_data($bloc, $this->tpl_data_bloc[$bloc_name]);


    Maintenant, pour etre le plus preci possible.
    Immaginons que je veuille recuperer les données du bloc news. Avec ce code, la variable $bloc_name contient bien le mot "news". Mais cela ne marche pas :( . Il me met cette erreur :
    Warning: Invalid argument supplied for foreach() in /var/www/template.php on line 144

    La ligne 144 c'est un foreach, mais qui marche en temps normal, vous serez si vous lisez plus loin :p

    Mainstenant, pour tester tout mon code, je remplace la ligne ci dessus par cella :
    $bloc = $this->generate_bloc_data($bloc, $this->tpl_data_bloc['news']);

    Et la, ça marche. Je precise que j'ai rien touché d'autre dans le code du moteur. Je ne fais que passer en brut le nom du bloc.


    J'aimerai donc que vous m'aidiez car j'ai vraiment aucune idée pour resoudre ce probleme. Mon code me parrait bon niveau syntaxe.
    Merci d'avance à celui qui sera m'aider à resoudre ce probleme ;)
    • Partager sur Facebook
    • Partager sur Twitter
      12 janvier 2006 à 21:51:14

      met un echo après $bloc_name = ... pour voir si c'est la bonne valeur.
      Tu peux montrer la ligne 144 aussi ?
      • Partager sur Facebook
      • Partager sur Twitter
        12 janvier 2006 à 22:10:05

        L'erreur de la foreach est sûrement dû à ce que tu lui envoi qui n'est pas un array(). A vérifier de ce côté là :)
        • Partager sur Facebook
        • Partager sur Twitter
          13 janvier 2006 à 17:36:31

          Bon, apres de moult debugage à la brut. J'ai enfin trouvé d'ou ça venait :)
          En fait, il me rajoute à espace à $bloc_name.
          $bloc_name = preg_replace("!<bloc name='(.+)'>!s", '\1', $this->tpl_cache[$bloc_line]);

          Il me recupere bien le nom du bloc, mais il me met un espace apres le nom du bloc, donc c'est pour ça que c'est pas trouvé dans le tableau.
          En gros, si je fais un echo $bloc_name.'4'; , ça m'affichera : news 4

          Donc si vous voyez comment enlever l'espace, cela devrait marcher :)
          • Partager sur Facebook
          • Partager sur Twitter
            13 janvier 2006 à 17:47:55

            $bloc_name = trim($bloc_name);

            voilà
            • Partager sur Facebook
            • Partager sur Twitter
              13 janvier 2006 à 19:06:59

              $bloc_name = preg_replace("!<bloc name='\s*(.+)\s*'>!s", '\1', $this->tpl_cache[$bloc_line]);


              Remarque : s'il met un espace c'est parce qu'il est dans la template, c'est donc le codeur de la template (en l'occurence toi) qui a merdé :p

              Comme tu fais la technique "template -> tableau" (on a déja discuté des différentes possibilités) tu dois t'assurer que les variables existent effectivement dans le tableau (alors que dans l'autre sens on n'était pas obligé d'avoir une occurence dans la template pour que ça marche :p).
              • Partager sur Facebook
              • Partager sur Twitter

              Mon moteur de templates

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown