wie würdet ihr vorgehen ? --> bei templates mit if else, switch ... ?

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

  • wie würdet ihr vorgehen ? --> bei templates mit if else, switch ... ?

    hi zusammen,

    Ich bastel grad an einer tpl class, nun wollte ich auch if else switch ect. in den templates benutzen.

    Nun stellt sich mir die frage, wie man dies am besten lösen könnte.

    Ich stell mir das ungefähr so vor:

    PHP-Code:
    index.tpl
    ==============

    TEXT TEXT
    <if {var} == {var2}>
    JA
    <else>
    NEIN
    </endif>
    NOCH MEHR TEXT 

    Sollte man jetzt z.b. das alles durch ein preg ect. laufen lassen, oder könnte man dies eleganter lösen ?

    // Ich post gleich mal meine tpl class, muss nur noch bissle verändern

  • #2
    Wie wär's mit:

    PHP-Code:
    TEXT TEXT
    <?php if ( $var==$var2) { ?>>
    JA
    <?php } else { ?>
    NEIN
    <?php ?>
    NOCH MEHR TEXT
    Und das ganze läßt Du durch ein eval() laufen ... ich glaube Du hast keine Ahnung was es heißt 'nen Parser zu schreiben ... !
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      ich glaube, er wollte die Templatesynonyme für seinen Parser haben.. oder seh ich das jetzt falsch ??

      Kommentar


      • #4
        Er wollte einen eleganten Weg ... und einen Interpreter in einer Interpreter-Sprache zu schreiben ist schlichtweg absurd!
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          ja sicher, es ist aber ein anfang...

          meine ersten Templateversuche und meine aktuelle Klasse parsen auch noch...

          Meine neue erzeugt mir PHP-Code, der dann ganz normal ausgeführt wird (allerdings noch ziemlich Buggy..)

          gruss

          Kommentar


          • #6
            ich habe fertig

            ist sicher net so dat beste, aber wat solls

            PHP-Code:
            class tpl
            {
                var 
            $template_path './templates';
                var 
            $template_extension 'tpl';
                
                var 
            $start '{+';
                var 
            $end '+}';
                
                var 
            $key_cache = array();
                var 
            $val_cache = array();
                var 
            $template_cache = array();
                
                
                
            /* add_identifiers */
                
            function add_identifiers$var_name )
                {
                    return 
            preg_quote($this->start.$var_name.$this->end);
                }
                
                
                
            /* get template */
                
            function get($templatename)
                {
                    if ( !isset(
            $this->template_cache[$templatename]) )
                    {
                        if ( 
            file_exists($this->template_path.'/'.$templatename.'.'.$this->template_extension) )
                        {
                            
            $this->template_cache[$templatename] = implode(''file($this->template_path.'/'.$templatename.'.'.$this->template_extension));
                        }
                        else
                        {
                            
            $this->error('File not exists');
                            
                        }
                    }
                    return 
            $this->template_cache[$templatename];
                }
                
                
                
            /* cache templates */
                
            function cache_templates($template_list)
                {
                    
            $template_list explode(','$template_list);
                    
                    while(list(,
            $val) = each($template_list))
                    {
                        if ( !isset(
            $this->template_cache[$val]) )
                        {
                            
            $this->template_cache[$val] = $this->get($val);
                        }
                    }
                }
                
                
                
            /* print template */
                
            function output($template)
                {
                    
            $template $this->clean_template($template);
                    
                    
            /* compress output */
                        
                    
            echo $template;
                }
                
                
                
            /* replace vars */
                
            function replacevars($replace '')
                {
                    if( 
            is_array($replace))
                    {
                        while( list(
            $key$val) = each($replace) )
                        {
                            if (
            $key != '')
                            {
                                
            $this->key_cache[$key] = '#'.$this->add_identifiers($key).'#';
                                
            $this->val_cache[$key] = $val;
                            }
                        }
                    }
                }
                
                
            /* replace ifelse */
                
            function replace_ifelse$template )
                {
                    
            /* ersetzte ifelse im tpl */
                    
            return $template;
                }
                
                
                
            /* parse template */
                
            function parse_template$template )
                {
                    
            $template $this->get($template);
                    
            $template $this->replace_ifelse($template);
                    
            $template preg_replace($this->key_cache$this->val_cache$template);
                    return 
            $template;
                }
                
                
            /* clean template */
                
            function clean_template$template )
                {
                    
            $search_array = array(
                    
            '#'.$this->start.'(.*)'.$this->end.'#'
                    
            );
                    
                    
            $replace_array = array(
                    
            ''
                    
            );
                    
                    
            $template preg_replace($search_array$replace_array$template);
                    
                    return 
            $template;
                }
                
                
                
            /* error */
                
            function error$error_msg )
                {
                    echo 
            '<br /><span style=\'font-family: verdana; font-size: 12px;\'><span style=\'color: #ff0000;\'><b>Template Error</b>:</span> '.$error_msg.'</span><br />';
                    exit;
                }


            das funkt ja soweit, nur da wo jetzt halt die function replace_iflese ist, wollte ich das halt mit dem ifelse machen.

            @MoRtAlAn dürfte man wisen, wie deine Lösung so im groben funktioniert ?

            Kommentar


            • #7
              komischerweise ist es irgendwie in ein cms mit template klasse und so zu schreiben .. naja *gg*

              jedenfalls hab ich mir ifelse so überlegt ..

              (ich mach alles mit preg_replace()
              ich such nach dem block 'if ... endif' und ruf mit dem block dazwischen und der bedingung eine funktion auf ..

              evtl kannst dann noch die blöcke durch 'else' splitten, damit du die else funktion auch drin hast ..

              hmm .. variablen raussuchen und mit global reinholen (klappt bei mir)
              if(eval($bedingung)) (klappt bei mir leider ned)

              und dann entscheiden welchen block du zurücklieferst ..
              klingt simpel, er scheitert bei mir nur bei der bedungung ..

              unexpectet &end in eval'd code in line ..

              keine ahnung was das bedeutet .. wenn ich ein ";" an die bedingung anhäng meckert er zwar nimmer, dafür klappt die abfrage nicht

              so, ich hab den denkansatz geliefert, du bitte die lösung
              mfg,
              [color=#0080c0]Coragon[/color]

              Kommentar


              • #8
                @CannabisCow: Das Prinzip ist simpel, an der Umsetzung hab ich schwer zu knabbern gehabt...

                für ein Template brauchst du ja eine PHP-Datei und eine TPL-Datei... Meine Templateklasse macht aus den beiden Dateien eine neue PHP-Datei, die dann aufgerufen wird.

                Vorteil: ich benötige kein Eval und kann trotzdem mit Templates arbeiten
                Nachteil: die Entwicklung ist ziemlich aufwändig

                Smarty benutzt glaube ich auch so ein System (meine ist aber nicht ganz so umfangreich)

                gruss

                Kommentar


                • #9
                  komischerweise ist es irgendwie in ein cms mit template klasse und so zu schreiben .. naja *gg*
                  ?


                  @Coragon Rivito
                  irgendwie weis ich net, was du willst *G*
                  hab nur soviel verstanden, das du das mit preg ect. machst

                  aber sowas in richtung blöcke, hab ich gestern schon angefangen, klappt auch allerdings, bin ich nur dazu gekommmen, das if ausgeführt wird wenn $val leer ist

                  also sowas halt:

                  PHP-Code:
                  <if {+var+} == "">
                  laber labber
                  </endif> 
                  @MoRtAlAn
                  Danke, klingt simpel ja *aber umsetzten hmm
                  Muss mir mal Smarty ansehen

                  Kommentar

                  Lädt...
                  X