Fragen zu Template Klasse

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

  • Fragen zu Template Klasse

    Hi,
    also ich versuch grad ne Template Klasse zu erstellen, bist jetzt bin ich soweit, dass ich eine Template einlese und anschließend ausgebe.
    Naja und nun möcht ich halt ganz gern die Variablen in den Templates ersetzen, diesen Arrays zuweisen, PHP-Code in der Template Datei ausführen, und Arrays mit einer Schleife in dem Template ausgeben.
    Naja und da wollt ich fragen ob ihr mir einige Ratschläge geben könnt, wie ich das umsetzen kann?
    Hier mal der bisherige Code:
    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
    class 
    template
    {
        
    // Einstellungen für das Template
        
    var $serverUrl 'bla';       // Server Url zum Script
        
    var $tplName;                   // Name des Templates
        
    var $tplDir    "templates\\\"; // Ordner des Templates
        var 
    $tplCache  = "cache\\\";     // Ordner des Caches
        
        function template()
        {
            
    $this->tplDir    = $this->serverUrl.$this->tplDir;
            
    $this->tplCache  = $this->serverUrl.$this->tplCache;
            
    $this->dirExists($this->tplDir); // Überprüfen ob Template-Ordner existiert
            
    $this->dirExists($this->tplCache); // Überprüfen ob Cache-Ordner existiert
        }
        function display(
    $tplName)
        {
            
    $this->tplName = $this->tplDir.$tplName;
            
    $this->getTemplate();
            echo 
    $this->tplLoad; // Template ausgeben
        }
        function getTemplate()
        {
            
    $this->tplExists(); // Überprüfen ob Template existiert
            
    $tplLoad = implode("",file($this->tplName)); // Template Laden
            if(!
    $tplLoad) die("Template ".$this->tplName." konnte nicht geladen werden");
            
    $this->tplLoad = $tplLoad;
            
        }
        function dirExists(
    $dir)
        {
            if(is_dir(
    $dir)) {
                return true;
            } else {
                die("
    Verzeichnis ".$dir." nicht gefunden.<br /><br />");
            }
        }
        function tplExists()
        {
            if(file_exists(
    $this->tplName)) {
                return true;
            } else {
                die("
    Template ".$this->tplName." nicht gefunden.<br /><br />");
            }
        }
    }

    $pepo= new template();
    $pepo->display('index.tpl');
    ?>
    1123581321

  • #2
    was genau ist dein problem? das ersetzen von Platzhaltern?

    preg_replace() oder str_replace()

    Kommentar


    • #3
      sollte man nicht immer str_replace nehmen, weil regex viel zu langsam ist?

      btw. was schreibst du konkret in den cache ordner? html dateien?

      @Topic
      Blöcke fehlen noch wenn du die willst!
      Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
      - ...und solche Behauptungen in "falsches Resourcenmanagement"

      Kommentar


      • #4
        Ja, html Dateien kommen in den Cache.

        Was genau kann ich mit Blöcken machen?
        1123581321

        Kommentar


        • #5
          sollte man nicht immer str_replace nehmen, weil regex viel zu langsam ist?
          joar, wenn vorher bekannt ist, welche platzhalter es gibt.

          Was genau kann ich mit Blöcken machen?
          Schleifen realisieren. Z.B. wenn du Tabellen ausgeben willst.

          Schonmal unsere Tutorials zu dem Thema gelesen. oder generell mal ne fertige Klasse in der Hand gehabt. Könnte helfen.

          Kommentar


          • #6
            Ok, bin bis jetzt soweit, dass ich Variablen im Template durch normale Strings erstzen kann und Arrays mit dem Index im Template ansprechen kann.
            Meine Frage, wie kann ich sowas ersetzen, was im Template steht:
            {foreach from="$array" key="key" item="item"}
            html-code {$item.schlüssel_1} html-code {$key} html-code {$item.schlüssel_2
            {/foreach}
            Das hier is die Funktion bisher
            PHP-Code:
                function replaceVars()
                {
                    foreach(
            $this->replaceArray as $item) { //Das Array mit den zu
            //ersetzenden Varibalen
                        
            if(is_string($item['var'])) {
                            
            $this->tplLoad str_replace("{\$".$item['var_name']."}",
             
            $item['var'], $this->tplLoad);
                        } elseif(
            is_array($item['var'])) {
                            foreach(
            $item['var'] as $key => $value) {
                                
            $this->tplLoad str_replace("{\$".$item['var_name'].".".$key."}",
             
            $value$this->tplLoad);
                                
            // Hier irgendwas mit ereg_replace
                            
            }
                        }
                    }
                } 
            da brauch ich jetzt ereg_replace oder?
            1123581321

            Kommentar


            • #7
              naja, ob mal die for schleife im template definieren sollte, halte ich für fragwürdig.

              informier dich mal über die besagten blöcke.

              Kommentar


              • #8
                naja also ich würd schon ganz gern die schleife so im template definieren, wie bei smarty.
                hab halt vorher smarty benutzt und jetzt möcht ich nid alle templates ändern.

                finde leider nix richtiges zu den besagten blöcken.
                1123581321

                Kommentar


                • #9
                  Wenn du nicht alle Templates ändern müssen willst, muss deine Template-Engine die Syntax von Smarty 100% unterstützen, du müsstest also Smarty nachprogrammieren.

                  Warum?
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    ne, nid nachprogrammieren, ich brauch ja nid alle funktionen und extras die smarty bietet.
                    1123581321

                    Kommentar


                    • #11
                      Aber zumindest die Art und Weise, wie Smarty Schleifen verarbeitet brauchst du exakt so, da kannst du auch direkt Smarty nutzen.

                      Wenn nicht, überlege dir was, wie du mit z. B. regulären Ausdrücken erkennst, wo eine Schleife anfängt und wo sie aufhört, wie du Schleifen in Schleifen auflösen willst, entwickel das und wenn es läuft und du zufrieden bist, dann passe deine templates an
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        naja, hab jetzt mal gesucht, weiß immer noch nid was es mit diesen Blöcken auf sich hat.

                        Ne andre Frage: Gibt es eine Möglichkeit das ganze ohne Reguläre Ausdrücke zu programmieren?
                        1123581321

                        Kommentar


                        • #13
                          Gibt es, aber diese Möglichkeit ist meines Erachtens nach um Längen komplizierter und umfangreicher (je nachdem, was deine Template-Klasse leisten können soll): PHPs String-Funktionen (strpos, strlen, substr, etc.).
                          Ich glaube, dass das unb-Forum (unclassified newsboard forum) einen Template-Compiler mit String-Funktionen anstelle von Regulären Ausdrücken benutzt... Das kannst du dir ja mal als Anregung ansehen. Mich persönlich würde die Performance interessieren...
                          Nieder mit der Camel Case-Konvention

                          Kommentar


                          • #14
                            hm, leider finde ich auch keinerlei tutorials zu dem thema template klasse.

                            und bei dem hier fehlt ja teil 2: http://www.php-resource.de/tutorials/read/26/1/
                            1123581321

                            Kommentar


                            • #15
                              Was habt ihr nur immer mit euren Tutorials.

                              Es gibt ein Tutorial und du hast es gefunden.
                              Teil 2, der deiner Meinung nach fehlt, ist etwas, was du selbst machen können solltest, wenn du Teil 1 verstanden hast.

                              Eventuell solltest du dir noch das Tutorial zu regulären Ausdrücken anschauen und das dann geschickt kombinieren...

                              Was genau fehlt dir denn an dem Tutorial?
                              (Nein, ich kenne es nicht)
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X