Templates - PLatzhalter mehrmals ersetzen

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

  • Templates - PLatzhalter mehrmals ersetzen

    Hallo,
    ich möchte einen Platzhalter mehrmals ersetzen (aus einer HTML-Datei), weiß aber nicht, wie ich das machen kann, ein kleines und unauffälliges Template-Script habe ich schon gebastelt:
    PHP-Code:
    <?php
    class template
    {
        var 
    $pfad;
        var 
    $ersetz_name;
        var 
    $var_name;
        var 
    $tpl_name;
        var 
    $end;
        var 
    $save;
        
        function 
    laden($pfad$tpl_name)
        {
            
    $load file_get_contents($pfad.$tpl_name);
            
    $this->save=$load;
        }
        
        function 
    ersetzen($var_name$ersetz_name)
        {
            
    $ersetzen str_replace("{".$var_name."}"$ersetz_name$this->save);
            
    $this->end=$ersetzen;
        }
        
        function 
    out()
        {
            echo 
    $this->end;
            return 
    true;    
        }
    }
    $tpl1 = new template;
    $tpl1->laden('','template.html');
    $tpl1->ersetzen("titel""Testtitel");
    $tpl1->out();
    ?>
    Wie könnte ich das machen?

  • #2
    http://de3.php.net/manual/de/function.preg-replace.php:
    mixed preg_replace (mixed Suchmuster, mixed Ersatz, mixed Zeichenkette [, int Limit])

    Kommentar


    • #3
      Ich glaube habe mich unkonkret ausgedrückt möchte, dass ein Platzhalter, bsw. titel mit mehreren Werten ersetzt wird, bsw. Titel1, Titel2, Titel3,...

      Kommentar


      • #4
        mach mal ein beispiel.

        Kommentar


        • #5
          Es gibt in einem Template einen Platzhalter "{Newstitel}", der soll durch 5 Newstitel ersetzt werden:

          Newstitel1
          Newstitel2
          Newstitel3
          Newstitel4
          Newstitel5

          D.h.
          Beispiel:

          Aktuelle News:
          {Newstitel}

          Nach Ersetzung soll es so aussehen:

          Aktuelle News:
          Newstitel1
          Newstitel2
          Newstitel3
          Newstitel4
          Newstitel5

          Kommentar


          • #6
            Dann musst du halt einfach mit dem Ersetzen warten und den Platzhalter mit einer Variablen ersetzen, die alle News zusammen enthält.

            Alternativ kannste deinem Template-System auch Schleifen beibringen, aber das ist dann sicher zu aufwändig...

            Kommentar


            • #7
              Daran hab ich auch schon gedacht, aber dann würde ich vor dem Problem stehen, wenn ich z.B. Aktuelle News anzeigen will, Beispiel:

              Template:

              {Newstitel}
              {Newsicon} {Newstext}

              Ausgabe soll dann sein:

              Newstitel1
              Newsicon1.jpg Newstext1

              Newstitel2
              Newsicon2.jpg Newstext2

              Wie kann ich das dann machen?

              Kommentar


              • #8
                ich würd einfach smarty nehmen ... ist nicht viel aufwand und kann schleifen und noch vieles mehr...ich hab das bei meinem news-script auch, und das funkt sehr schön-->
                guckst du hier
                www.muak.de

                Kommentar


                • #9
                  Ja das glaub ich dir, aber smarty ist mir zu groß, brauche was kleines, außerdem will ich jetzt versuchen das hinzubekommen

                  Kommentar


                  • #10
                    Ich habs, jetzt klappt es, kann mal wer schauen, ob das Programmiertechnisch auch gut ist oder nur eine Aneinanderreihung von Befehlen

                    PHP-Code:
                    <?php
                    class template
                    {
                        var 
                    $pfad;
                        var 
                    $ersetz_name;
                        var 
                    $var_name;
                        var 
                    $tpl_name;
                        var 
                    $end;
                        var 
                    $save;
                        
                        function 
                    laden($pfad$tpl_name)
                        {
                                
                    $load file_get_contents($pfad.$tpl_name);
                                
                    $this->save=$load;
                        }
                        
                        function 
                    virtuel($var_name$ersetz_name)
                        {
                            if(
                    $this->end == "")
                            {
                                
                    $this->var_name=$var_name;
                                
                    $this->ersetz_name=$this->ersetz_name.$ersetz_name;
                            }
                            elseif(
                    $this->var_name==$var_name)
                            {
                                
                    $this->var_name=$var_name;
                                
                    $this->ersetz_name=$this->ersetz_name.$ersetz_name;    
                            }
                            else
                            {
                                
                    $this->var_name=$var_name;
                                
                    $this->ersetz_name=$ersetz_name;
                            }
                        }
                        
                        function 
                    ersetzen()
                        {
                            if(
                    $this->end == "")
                            {
                                
                    $ersetzen str_replace("{".$this->var_name."}"$this->ersetz_name
                    $this->save);
                                
                    $this->end=$ersetzen;
                            }
                            else
                            {
                                
                    $ersetzen str_replace("{".$this->var_name."}"$this->ersetz_name
                    $this->end);
                                
                    $this->end=$ersetzen;
                            }
                        }
                        
                        function 
                    out()
                        {
                            echo 
                    $this->end;
                            return 
                    true;    
                        }
                    }
                    $tpl1 = new template;
                    $tpl1->laden('','template.html');
                    $tpl1->virtuel("head""Kopf");
                    $tpl1->ersetzen();
                    $tpl1->virtuel("titel""Testtitel<br>");
                    $tpl1->virtuel("titel""Testtitel2<br>");
                    $tpl1->virtuel("titel""Testtitel3");
                    $tpl1->ersetzen();
                    $tpl1->out();
                    ?>
                    Werde dann mal noch ein bissle Dokumentieren und ordnen, aber sonst scheint es zu funktionieren, werde mich jetzt mal ran machen, das ganze für z.B. Newsübersichten zu machen, d.h. das mehrere Platzhalter für eine News zusammengefasst wiederholt werden, ihr wisst schon, was ich meine.

                    Kommentar


                    • #11
                      Kann mir mal jemand bitte diese Zeile in die Reguläre Ausdrucksweise schreiben, weil ich bekomme das nicht hin?
                      [$this->block_name]*[/$this->block_name]

                      Das * steht für beliebig, d.h. es soll alles einschließlich des [$this->block_name] und [/...] ersetzt werden. Kann das jemand von euch?

                      Kommentar


                      • #12
                        beliebig geht mit (.*?) und für den Rest schaust du dir preg_quote an
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Ja danke, hab schon gefunden.

                          Kommentar


                          • #14
                            Habe jetzt eine neue Idee für die Blöcke, es müsste nur der Code zwischen [block][/block] komplett kopiert werden, dann die Platzhalter ersetzt werden und dann den Code zwischen [block][/block] im richtigen Template durch den in der Variable ersetzt werden, aber wie kann ich den kompletten Quelltext zwischen 2 "Wörtern" kopieren?

                            Kommentar


                            • #15
                              preg_replace anschauen

                              Kommentar

                              Lädt...
                              X