Hilfe bei meiner Templateklasse

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

  • Hilfe bei meiner Templateklasse

    Hi

    ich entwickle gerade eine kleine Templateklasse. Ohne Schleifen im Template funktionierte sie bereits gut. Da ich aber auch Schleifen parsen möchte, habe ich sie ein wenig umgeschrieben. Funktioniert eigentlich auch alles, bis auf die output() funktion. Ich wäre um Hilfe froh, wie ich die output funktion umschreiben muss, damit das ganze funktioniert. Meine Versuche waren bis jetzt erfolglos.

    Hier aber mal die Klasse:

    PHP-Code:
    <?php
    ////////////////////////////////////////////////////////////////////////////////
    //                                                                            //
    //                  Copyrights 2005 by Roger Jaggi                            //
    //                                                                            //
    ////////////////////////////////////////////////////////////////////////////////
    class Template
    {
        var 
    $loop_names;
        var 
    $loop_values;
        var 
    l$tpl_loops;
        
    // Template laden
        
    function loadtemplate($file=false)
        {
            if(!
    file_exists($file)){
                die(
    'Das Template "'.$file.'" konnte nicht gefunden werden!');
            }

            
    $this->loop_names = array("default" => array());
            
    $this->loop_values = array("default" => array());
            
    $this->tpl_loops = array();
            
            
    $this->tpl_loops['default'] = $this->string_parse(file_get_contents($file));
        }

        
    // String parsen, um event. Funktionen darin zu registrieren in tpl_loops[]
        
    function string_parse($parsestring){
            
    preg_match_all("/<!--\s+BEGIN\s+(.*)?\s+-->(.*)<!--\s+END\s+(\\1)\s+-->/ms",$parsestring,$pma);
            for (
    $i 0$i count($pma[0]); $i++)
            {
            
    $search "/\s*\n*<!--\s+BEGIN\s+(" $pma[1][$i] . ")?\s+-->(.*)<!--\s+END\s+(" $pma[1][$i]. ")\s+-->\s*\n*/ms";
            
    $replace "{".$pma[1][$i]."}";

            
    $this->loop_names[''.$pma[1][$i].''] = array();
            
    $this->loop_values[''.$pma[1][$i].''] = array();

            
    $this->string_parse(''.$pma[2][$i].'');

            
    $parsestring preg_replace($search,$replace,$parsestring);
            
    $this->tpl_loops[''.$pma[1][$i].''] = $parsestring;
            }
            return 
    $parsestring;
        }
        
        
    // Variable hinzufügen
        
    function value_assign($name$value$loopname='default')
        {
            if (
    is_array($name))
            {
            foreach (
    $name as $key => $val)
                {
                    
    array_push($this->loop_names[$loopname], '{'.$key.'}');
                    
    array_push($this->loop_values[$loopname], $val);
                }
            }
            else
            {
            
    array_push($this->loop_names[$loopname], '{'.$name.'}');
            
    array_push($this->loop_values[$loopname], $value);
            }
        }
        
    // Dieser Abschnitt funktioniert nicht, es kommt keine Fehlermeldung,  und führt auch nicht den gewünschten Ablauf durch!
        
    function output()
        {
            
    // Alle Elemte des Array umkeheren, um sie in umgekehrter Reihenfolge zu bearbeiten!
            
    $elemente array_reverse($this->tpl_loops);
            
    $letztes count($elemente)-1;
            
    $i 0;
            
    // Subloobs müssen in den Variablen der übergeordneten Loops gespeichert werden, wenn dort die entsprechende Variable vorhanden ist!
            
    foreach($elemente as $name => $value){
                
    $el $i 1;
                if(
    $i >= $letztes){
                
    $el $letztes;
                }
                
    // prüfen, ob das Element im nächsten Element vorkommt, sonst ins Defaultelement einfügen
                
    if(strstr("{".$name."}""%".$elemente[$el]."")){
                
    $elemente[$i+1] = str_replace($this->loop_names[$name], $this->loop_values[$name], $elemente[$el]);
                }
                else{
                
    $elemente[$letztes] = str_replace($this->loop_names[$name], $this->loop_values[$name], $elemente[$letztes]);
                }
                
    $i++;
            }
            return 
    "".$elemente[$letztes]."";
        }
    }

    ?>
    Die Outputfunktion sollte folgendermassen funktionieren:
    - Array tpl_loops umkehren, damit die Bearbeitung rückwärts erfolgt, so dass eben auch subloops in loops eingefügt werden können.
    - In der foreachschleife wird mittels strstr() geprüft, ob die entsprechende Variable des Loops im übergeordneten Loop zu finden ist. Falls dies zutrifft, wird der Loop im übergordneten Loop eingefügt. Wenn dies nicht zutrifft, wird der Loop im obersten Loop, also in default eingefügt!

    Leider will dieses Prinzip nicht funktionieren, deshalb bitte ich euch um Hilfe!

    Vielen Dank!
    mfg rogerworld

    EDIT: Hoffe nun, dass diese Fragenstellung nun so erlaubt ist!
    Zuletzt geändert von rogerworld; 27.01.2005, 22:48.

  • #2
    http://www.php-resource.de/forum/sho...threadid=47906

    erst lesen und befolgen!

    Kommentar


    • #3
      Habe die Klasse nun ausführlicher erklärt! Hoffe nun, dass ihr mir helfen könnt!

      mfg rogerworld

      Kommentar


      • #4
        So, habe die Klasse starkt verändert und sie funktioniert nun!

        @TBT: Könntest du event. meine Klasse in deinen Benchmark einbauen? Falls ja, danke vielmals und benachrichtige mich bitte. Ich schicke dir dann den Code!

        Ich bin übringens nächste Woche in den Ferien!

        mfg rogerworld

        Kommentar


        • #5
          dann schick mal an < tbt1 @ gmx.de >
          inclusive Anleitung bitte
          TBT

          Die zwei wichtigsten Regeln für eine berufliche Karriere:
          1. Verrate niemals alles was du weißt!


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #6
            Vielen Dank! Ich schicke die Klasse gleich mit Anleitung!

            mfg rogerworld

            Kommentar


            • #7
              bei Variablen nicht schlecht, aber bei den loops sollte mehr drin sein

              http://tbt.dyndns.org/dev_bench/
              TBT

              Die zwei wichtigsten Regeln für eine berufliche Karriere:
              1. Verrate niemals alles was du weißt!


              PHP 2 AllPatrizier II Browsergame

              Kommentar


              • #8
                verschachtelte loops funktionieren nicht?
                TBT

                Die zwei wichtigsten Regeln für eine berufliche Karriere:
                1. Verrate niemals alles was du weißt!


                PHP 2 AllPatrizier II Browsergame

                Kommentar


                • #9
                  @TBT

                  Auf Deiner Benchmarkseite schneidet das PxPTemplate recht gut ab.
                  Wo kann ich das Templatesystem finden?
                  Bei allen anderen steht ein Link auf der Übersichtsseite, aber dafür nicht.
                  Google spuckt auch nichts aus.
                  Wo finde ich Infos dazu?

                  Kommentar


                  • #10
                    das ist eine Eigenentwicklung
                    TBT

                    Die zwei wichtigsten Regeln für eine berufliche Karriere:
                    1. Verrate niemals alles was du weißt!


                    PHP 2 AllPatrizier II Browsergame

                    Kommentar


                    • #11
                      Und hast Du vor das mal zu veröffentlichen oder bleibt es in deiner privaten Hand?
                      Ich hätte auf jeden Fall großes Interesse daran.

                      Kommentar


                      • #12
                        Noch zu meiner Klasse:
                        Bei den Variabeln ist sie ziemlich gut. Die Loopfunktion in der Klasse habe ich soeben noch ein wenig verbessert. Subloops sind leider nicht möglich. Ich weis leider nicht, wie man Subloops überhaupt realisieren kann. Neu ist in der Klasse noch die include-Funktion dazugekommen, sie will aber noch nicht richtig funktionieren.

                        Hättest du vielleicht noch eine Idee, wie man die Loops noch verbessern könnte?

                        mfg rogerworld

                        EDIT: Erst bei vielen Loops hat die Klasse eine Chance gegen die Konkurenz!
                        Zuletzt geändert von rogerworld; 07.02.2005, 16:39.

                        Kommentar


                        • #13
                          Hi

                          @tbt :

                          wie waer es noch ITX mit rein zu nehmen,
                          war damals eine kleine templateklasse über die ich zu beginn
                          gestolpert bin ...
                          reicht für einiges aus, vor allem bleibt der htmlcode für webdesigner
                          lesbar ...
                          was für mich wenn ich für andere arbeite oft ein wichtiges kriterium ist ...

                          gruss
                          iglo

                          Kommentar


                          • #14
                            http://www.ulf-wendel.de/projekte/it...php?mode=print

                            waer der link zu der itx


                            gruss
                            iglo

                            Kommentar


                            • #15
                              ITX:

                              Test für die Variablenunterstützung isst schon drin,
                              die anderen dauern noch ne Weile


                              @DSB: die Klasse ist nicht öffentlich
                              TBT

                              Die zwei wichtigsten Regeln für eine berufliche Karriere:
                              1. Verrate niemals alles was du weißt!


                              PHP 2 AllPatrizier II Browsergame

                              Kommentar

                              Lädt...
                              X