Problem mit Schleifenparsing im eigen TPL System

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Schleifenparsing im eigen TPL System

    Hi hab mir nen kleines Templatesystem geschrieben geht auch soweit auch das mit den Schleifen bis auf eine Sache:

    Wenn ich jetzt in einer schleife zB folgendes zu stehen hab

    <a href="link.php?id={%platzhalter%}">{%platzhalter2%}</a>


    spinnt er rum und parst mir den rest in der Schleife nicht mehr richtig.

    (liegt am ersten platzhalter im link das hab ich schon rausbekommen nur warum nicht)



    hier mal die Funktion für die Schleifen.

    PHP-Code:
     function replace($search,$replace)
     {

     
          if(!
    is_array($replace))
          {        
           
    $this->content str_replace("{%".$search."%}"$replace$this->content);
          }
          else
          {
            
            
            
    preg_match_all("/<--- BEGIN name=".$search."--->(.*?)<--- END name=".$search."--->/si"
                            
    $this->content$musterPREG_PATTERN_ORDER);    
                            
            
    $musterneu =preg_replace("/<--- BEGIN name=".$search."--->(.*?)<--- END name=".$search."--->/is"
                                            
    "\\1"$muster[0][0]); 
         
            
    //zählt die zu ersetzenden arrayelemente und speichert sie in $i
             
    $count=count($replace);
             
    $i=0;
            
            
    //sucht die zu ersetzende namen raus bsp {%ersetzen.name%} << name wird gespeichert usw
             
    preg_match_all("/{%".$search.".(.*?)%}/U"$musterneu$zeichenPREG_PATTERN_ORDER);
             
    //zählt die anzahl und speicher sie in $count2
             
    $count2=count($zeichen[1]);
            
            
    //schleife solange laufen lassen bis alle arrayelemte eingesetzt wurden
            
    while($i<$count)
            { 
                 
    //zählervariable
                 
    $x=0;
                 
                 
    //speichert das neue ersetzende muster ab 
                 
    $muster2=$musterneu;
                 
                 
    //schleife solange laufen lassen bis alle platzhalter ersetzt wurden
                 
    while($x<$count2)
                 {  
                       
    $zeichen2=$zeichen[1][$x]; 
                       
    $z=strlen($zeichen2);
                      
                      
    $muster2 =str_replace("{%".$search.".".$zeichen2."%}"$replace[$i][$zeichen2], $muster2);
                       
    $x++;
                 }     
                  
    $ausgabe .=$muster2;     
                  
    $i++;
            } 
             
    //platzhalter code mit dem geparsten teil ersetzen
             
    $this->content =preg_replace("/<--- BEGIN name=".$search."--->(.*?)<--- END name=".$search."--->/si"
                                                
    $ausgabe,$this->content);
          }
     
     } 
    die Variablen (Arrays) zu den Schleifen sind dann folgendermaßen aufgebaut:

    PHP-Code:
    $ersetze = array();
    array_push($ersetzen, Array(
                                               
    "name"        => $name,
                                               
    "alter"    => $alter,

                                         )
                                
                             );
    array_push($ersetzen Array(
                                               
    "name"        => $name2,
                                               
    "alter"    => $alter2,

                                         )
                                
                             ); 
    Code:
    Array ( [0] => Array ( [name] => name [alter] => alter ) 
    	[1] => Array ( [name] => name2 [alter] => alter2 ) )
    HTMLgeht)
    Code:
    <--- BEGIN name=ersetzen--->	
    {%ersetzen.name%}<br>
    {%ersetzen.alter%}
    <--- END name=ersetzen--->

    HTMLwürde nicht geht)
    Code:
    <--- BEGIN name=ersetzen--->	
    <a href="link.php?alter={%ersetzen.alter%}">{%ersetzen.name%}</a><br>
    <--- END name=ersetzen--->
    Code ist nicht gerade der beste hoffe aber das man trotzdem durchblickt.

    mfg
    et
    Zuletzt geändert von eternitysoft; 15.06.2006, 22:25.

  • #2
    du suchst nach {% machst aber deine platzhalter {
    also ohne %-zeichen.
    Das ist das, was mit aufgefallen ist, sonnst muss du uns relevante Zeilen zeigen, damit hast du mehr schanzen, dass dir geholfen wird.
    Nicht jeder hat bock deine ganze code bei sich zu testen.
    Slava
    bituniverse.com

    Kommentar


    • #3
      sry hab ich nur hier im thread vergessen im Script hab ich {%%} zu stehen.

      PHP-Code:
      //sucht die zu ersetzende namen raus bsp {%ersetzen.name%} << name wird gespeichert usw
               
      preg_match_all("/{%".$search.".(.*?)%}/U"$musterneu$zeichenPREG_PATTERN_ORDER);

      [...]

      //schleife solange laufen lassen bis alle platzhalter ersetzt wurden
      while($x<$count2)
                   {  
                         
      $zeichen2=$zeichen[1][$x]; 
                         
      $z=strlen($zeichen2);
                        
                        
      $muster2 =str_replace("{%".$search.".".$zeichen2."%}"$replace[$i][$zeichen2], $muster2);
                         
      $x++;
                   }     
                    
      $ausgabe .=$muster2;     
                    
      $i++; 
      hier nochmal die wichtigsten beiden stellen (mMn)

      Kommentar


      • #4
        so direkt kann ich nichts erkennen, weil ich keine Möglichkeit habe die werte von Variablen kontrollieren.
        Es sieht so aus, dass ich doch deine code durch meine debuger laufen lassen muss.
        sende per Anhang deine function, Aufruf mit deinen Parameter, und template.
        es kann natürlich sein, dass zum diesem Zeitpunkt hast du ein paar print_r und echo eingebaut und dadurch selber fehler gefunden
        Slava
        bituniverse.com

        Kommentar


        • #5
          So hab da mal nen kleine änderung vorgenommen damit du zum testen jetzt nicht soviel arbeit hast und zwar folgendes.

          Im Orginalen werden alle Daten aus der Datenbank geholt.
          Sprich das entsprechende Tpl wird aus der Db geladen und die zu ersetzenden Daten das hab ich jetzt abgeändert.

          Hab mit print_r und echo auch schon nach Fehlern gesucht aber keine gefunden :P

          Danke dir das du dir das mal anguckst
          mfg
          et

          edit: sry Datei wurde nicht angehangen
          Link: http://eternitysoft2.et.funpic.de/tplclass.rar
          Zuletzt geändert von eternitysoft; 16.06.2006, 14:25.

          Kommentar


          • #6
            wenn man error_reporting(E_ALL); setzt, dann kann man viele dinge entdecken
            z.b.s
            Notice: Undefined index: id%}">{%news_headline.newstitle in D:\wamp\www\tplclass\inc\class\tplclass.php on line 69

            Notice: Undefined index: date%} / {%news_headline.time in D:\wamp\www\tplclass\inc\class\tplclass.php on line 69

            Notice: Undefined variable: ausgabe in D:\wamp\www\tplclass\inc\class\tplclass.php on line 72

            Notice: Undefined index: id%}">{%news_headline.newstitle in D:\wamp\www\tplclass\inc\class\tplclass.php on line 69

            Notice: Undefined index: date%} / {%news_headline.time in D:\wamp\www\tplclass\inc\class\tplclass.php on line 69
            -------------
            soll ich weiter machen? oder du hast schon ein paar Ideen?
            Slava
            bituniverse.com

            Kommentar


            • #7
              K also ich weiß jetzt wodrann das liegt weiß aber nicht wie ich das behoben kriege ><

              Also

              Notice: Undefined index: id%}">{%news_headline.newstitle in D:\wamp\www\tplclass\inc\class\tplclass.php on line 69

              Notice: Undefined index: date%} / {%news_headline.time in D:\wamp\www\tplclass\inc\class\tplclass.php on line 69

              etc kommt weil die Variablen nebennander stehen >< und er da irgendwie faxen macht


              Notice: Undefined variable: ausgabe in D:\wamp\www\tplclass\inc\class\tplclass.php on line 72
              weil es die Variable $ausgabe beim erstenmal anhängen nicht gab

              kannst du mir da weiterhelfen ?

              mfg
              et

              edit: ah sry danke für die Hilfe ich hab den fehler lag an den modifer U ><
              Zuletzt geändert von eternitysoft; 16.06.2006, 15:46.

              Kommentar


              • #8
                wegen fehler bei pattern darstellung
                sende ich es ohne highleiting

                function replace($search,$replace)
                {
                if(!is_array($replace))
                {
                $this->content = str_replace("{%".$search."%}", $replace, $this->content);
                }
                else
                {
                $ausgabe="";
                preg_match_all("/<--- BEGIN name=".$search."--->(.*?)<--- END name=".$search."--->/si",
                $this->content, $muster, PREG_PATTERN_ORDER);
                $musterneu= preg_replace("/<--- BEGIN name=".$search."--->(.*?)<--- END name="
                .$search."--->/is","$1", $muster[0][0]);

                $count=count($replace);
                $i=0;
                preg_match_all("/\{%".$search."\.([^%]+)%\}/U",
                $musterneu, $zeichen, PREG_PATTERN_ORDER);
                $count2=count($zeichen[1]);
                while($i<$count)
                {
                $x=0;
                $muster2=$musterneu;
                while($x<$count2)
                {
                $zeichen2=$zeichen[1][$x];
                $z=strlen($zeichen2);
                $muster2 = str_replace("{%".$search.".".$zeichen2."%}",
                $replace[$i][$zeichen2], $muster2);
                $x++;
                }
                $ausgabe.=$muster2;
                $i++;
                }
                $this->content = preg_replace("/<--- BEGIN name=".$search."--->(.*?)<--- END name="
                .$search."--->/si", $ausgabe,$this->content);
                }
                }
                Slava
                bituniverse.com

                Kommentar

                Lädt...
                X