[php] template engine

Pagina: 1
Acties:

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 31-08 13:50

Apache

amateur software devver

Topicstarter
K'heb vandaag ff een template engine in elkaar geknutseld, nu heb ik nog 2 problemen.

1) variablen tussen {loop} tags vervangen, op dit moment word er toegekend aan een array, een keyname, een array (met alle waarden die tijdens het parsen van de loop toegekend moeten worden) en het aantal elementen in die array.

Nu ben ik hier al wel ff mee bezig, maar ik krijg nooit het gewenste resultaat.

Functie:
PHP:
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
    function parse_loop($p_count, $p_loopinput){
    
        $tmploopcontent = $p_loopinput;
        $fullloopcontent = "";
        $loopcount = 1;
        
                
        if ($p_count == intval($p_count)){
        
            $loopcount = $p_count;
        
        }
        
        //print($p_count);
        //print($loopcount);
        
        /*
        if(is_string($p_count) && $loopcount != 1){
        
            $loopcount = $this->variablelist_loop_count["$p_count"];
        
        }
        */
        
        //print($loopcount);
        
        if ($loopcount != 1){
        
            
            for($i = 0; $i < $loopcount; $i++){
            
                for ($j = 0; $j < count($this->variablelist_loop[0]); $j++){
                    
                    $bleh = $this->variablelist_loop[1][$j];
                    
                    for($k = 0; $k < $this->variablelist_loop[2][$j]; $k++){
                        
                        //print("<h1>".$bleh[$k]."</h1>");
                    
                        $tmploopcontent = str_replace($this->variablelist_loop[0][$j], $bleh[$k], $tmploopcontent);
                                
                        
                    }
                    
                }
                    
                            
            }
                
            $fullloopcontent .= $tmploopcontent;
                
            //$tmploopcontent = "";
                
        }
        
        return $fullloopcontent;
    
    
    }


Dit is dus niet erg elegant en eigenlijk werkt het helemaal niet, wat ik al geprobeerd heb, wel veel, maar eerst hoopte ik het in 1 for klaar te spelen, bvb 4x loop af te lopen, de 4 elementen van de array te vervangen in de geloopte text, maar dit valt niet mee aangezien er verschillende "keys" zijn..

Het volgende probleem is niet zozeer een "probleem" aangezien ik er een lelijke oplossing voor heb maar die situeert zich rond de afhandeling van de if/else regexp.
Wanneer de condition false is blijft de {else} en laatste {endif} staan in de text.

PHP:
248
$this->filecontent = preg_replace("/{if=(.*?)}(.*?)({endif}|({else}(.*?){endif}))/eis", '$this->parse_ifs("$1", "$2", "$3")', $this->filecontent);


K'moet stiekem toegeven dat ik een enorme regexp n00b ben en pas sinds dit weekend m'n echte eerste regexp geschreven heb (met een hulp van Jotti ;))

Ik heb mijn testtemplates & de volledige source online gegooid: linkje

If it ain't broken it doesn't have enough features


  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

Ik snap niet helemaal wat je bedoeld met dat er verschillende "keys" zijn die je moet vervangen.

Je zou trouwens ook nkunnen kijken naar bestaande template engines. Er zijn al hele goeie en ook vrij snelle templates. Zoals SMARTY bijvoorbeeld.

Signature van nature


  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 17:39
Ik snap niet wat je precies wilt doen.

Kun je het even wat duidelijker uitleggen?

Verbouwing