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:
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.
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
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