Partage
  • Partager sur Facebook
  • Partager sur Twitter

str_replace dans un preg_replace

Casse-tete

    8 avril 2007 à 11:34:30

    Chatalut :)

    Je poste car j'ai un léger soucis.
    En effet, je n'arrive pas a placer un str_replace dans un preg_replace.


    <?php
    public function Load_Block ($Block$Data)
            {
            if ( ($Block != "") && (is_array ($Data)) )
                    {
            $this->Loaded_Template = preg_replace (
            "#<DEBUT:".$Block.">(.+)<MILIEU:".$Block.">(.+)<FIN:".$Block.">+#ismU",
            "<DEBUT:".$Block.">$1<MILIEU:".$Block.">$2".
            str_replace (array_keys ($Data), array_values ($Data), "$1").
            "<FIN:".$Block.">",
            $this->Loaded_Template) ;
                    }
            }
    // --------------------------------- //
    ?>


    $Block est un string contenant un mot.
    $Data est un array sous forme ("{TEST} => "Meuh");

    Avec ce code, il arrive correctement à afficher le nouveau block, mais ne translate pas les {TRUCS} présent dans le template :(

    J'ai aussi essayé avec un preg_replace_callback couplé a une fonction, mais c'est mort :/

    Merci par avance :)
    • Partager sur Facebook
    • Partager sur Twitter
      8 avril 2007 à 12:03:20

      Tu as aucune erreur ?

      Tu peux donner un exemple concret de ce que ça doit faire ? :)

      • Partager sur Facebook
      • Partager sur Twitter
        8 avril 2007 à 12:14:59

        Exemple concret..

        Voyons,

        Fichier de template

                                <div id="leftpanel">
                                        <div align="justify" class="graypanel">
                                                <span class="smalltitle">{TXTNEWS}</span><br />
                                              <DEBUT:menu>
                                                <br />
                                                <span class="smallredtext">{menu.NEWS}</span><br />
                                                <span class="bodytext">{menu.TEXTPRESENT}</span><br />
                                                <a href="#" class="smallgraytext">{menu.PLUS}</a><br />
                                              <MILIEU:menu>
                                              <FIN:menu>
                                                <br />
                                        </div>
                                </div>


        Et apres traitement,

                                        <DEBUT:menu>

                                                <br />
                                                <span class="smallredtext">{menu.NEWS}</span><br />
                                                <span class="bodytext">{menu.TEXTPRESENT}</span><br />
                                                <a href="#" class="smallgraytext">{menu.PLUS}</a><br />
                                        <MILIEU:menu>
                                               
                                                <br />
                                                <span class="smallredtext">{menu.NEWS}</span><br />

                                                <span class="bodytext">{menu.TEXTPRESENT}</span><br />
                                                <a href="#" class="smallgraytext">{menu.PLUS}</a><br />
                                               
                                                <br />
                                                <span class="smallredtext">{menu.NEWS}</span><br />
                                                <span class="bodytext">{menu.TEXTPRESENT}</span><br />
                                                <a href="#" class="smallgraytext">{menu.PLUS}</a><br />

                                           <FIN:menu>


        Et pour l'appel :
        // Ajoute d'un block
        $Template->Load_Block ("menu", array ("{menu.NEWS}"     => "Bienvenue !",
                                              "{menu.TEXTPRESENT}"  => " News de test",
                                              "{menu.PLUS}" => "Plus"
                                                                                  ));
        $Template->Load_Block ("menu", array ("{menu.NEWS}"     => "Bienvenue !2",
                                              "{menu.TEXTPRESENT}"  => "news de test",
                                              "{menu.PLUS}" => "Plus"
        • Partager sur Facebook
        • Partager sur Twitter
          8 avril 2007 à 13:07:15

          Oula ^^

          Déjà, je pense que tu dois mettre le str_replace entre parenthèse dans ton preg_replace pour qu'il calcule d'abord le str_replace avant de commencer le preg_replace, sinon ça risque de déconner..

          Ensuite si je comprends bien, ton preg_replace fonctionne mais c'est le str qui merde ?
          • Partager sur Facebook
          • Partager sur Twitter
            8 avril 2007 à 13:18:16

            Voilà, tu as compris :p

            Mais les () ne servent a rien. car il faut traiter en meme temps car $1
            • Partager sur Facebook
            • Partager sur Twitter
              8 avril 2007 à 13:33:24

              Ah ouais je comprends mieux :)
              En fait, il n'arrive pas à trouver ton $1 dans ton str_replace..

              Essaie sans les guillemets, si ça passe pas, tu devras faire un preg_match à mon avis pour récupérer le truc et là tu auras la variables que tu pourras utiliser dans le str_replace
              • Partager sur Facebook
              • Partager sur Twitter
                8 avril 2007 à 13:44:24

                Si je ne les met pas, j'ai le droit a une belle erreur :'(

                Pour que ca fonctionne, je pense qu'il faudrait pouvoir récupérer le contenu de $1 tout en étant dans le str_replace
                • Partager sur Facebook
                • Partager sur Twitter
                  8 avril 2007 à 13:55:41

                  Et avec un preg_match ?


                  <?php
                  public function Load_Block ($Block$Data)
                          {
                          if ( ($Block != "") && (is_array ($Data)) )
                                  {
                          preg_match("#<DEBUT:".$Block.">(.+)<MILIEU:".$Block.">(.+)<FIN:".$Block.">+#ismU", $this->Loaded_Template, $matches);
                          $this->Loaded_Template = str_replace (array_keys ($Data), array_values ($Data), $matches[0]);
                                  }
                          }
                  // --------------------------------- //
                  ?>


                  Il peut y avoir des erreurs dans le preg_match, j'ai fais un copier coller de ton truc sans réellement regarder
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 avril 2007 à 14:13:01

                    Mais a ce moment, je remplace juste..

                    Si tu regardes bien le script, j'ajoute aussi des parties.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    str_replace dans un preg_replace

                    × 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