daniel_sun
Erfahrenes Mitglied
Hallo,
ich bin aktuell dabei ein kleines Template-System zu coden. Da darf natürlich auch ein Loop nicht fehlen. Der einfache Loop funktioniert auch wie gewünscht:
Template:
Iwo im Script wird passend dazu ein array vorbereitet:
Vor der Anzeige des Templates wird das ganze das compiliert / geparst (In $this->template steht der Template code)
Wie schon gesagt Funktioniert es super. Nun soll das ganze in die 2. Runde gehen. So soll das ganze nun rekrusiev Funktioniert also 2, 3 etc. Schreifen in einander verschachtelt. Mir fehlt nur leider etwas der Ansatz. Wenn ich ein Tpl mit verschachtelter Foreach nehme wird beim preg_replace der Close-Tag der inneren schleife als Close für die äußere erkennt:
Wäre toll wenn einer nen Tip hat wie man das mit der Rekrusion am besten lösen kann Brauche wie nen Ansatz
Gruß
daniel_sun
ich bin aktuell dabei ein kleines Template-System zu coden. Da darf natürlich auch ein Loop nicht fehlen. Der einfache Loop funktioniert auch wie gewünscht:
Template:
HTML:
{foreach users}
<p>
<b>
{name}
</b>
{nachname}
</p>
{/foreach}
Iwo im Script wird passend dazu ein array vorbereitet:
PHP:
$users[0] = array('name' => 'Max', 'nachname' => 'Muster');
$users[1] = array('name' => 'Paul', 'nachname' => 'Panzer');
$template->assingArray('users', $users);
Vor der Anzeige des Templates wird das ganze das compiliert / geparst (In $this->template steht der Template code)
PHP:
$this->template = preg_replace_callback('%\{foreach (\w+)\}(.*)\{/foreach\}%sU', array(&$this, 'replaceForeach'), $this->template);
PHP:
private function replaceForeach($var){
var_dump($var);
$result = "";
$arr = $this->assingedArrays[$var[1]];
foreach ($arr as $a) {
$tmp = $var[2];
preg_match_all("/\{([^}]+)\}/", $var[2], $match);
foreach($match[1] as $m){
$tmp = str_replace('{'.$m.'}', $a[$m], $tmp);
}
$result .= $tmp;
}
return $result;
}
Wie schon gesagt Funktioniert es super. Nun soll das ganze in die 2. Runde gehen. So soll das ganze nun rekrusiev Funktioniert also 2, 3 etc. Schreifen in einander verschachtelt. Mir fehlt nur leider etwas der Ansatz. Wenn ich ein Tpl mit verschachtelter Foreach nehme wird beim preg_replace der Close-Tag der inneren schleife als Close für die äußere erkennt:
HTML:
{foreach users}
<p>
<b>
{name}
</b>
{nachname}
</p>
<p>
{foreach jobs}
<i>{name}</i>
{/foreach}
</p>
{/foreach}
Wäre toll wenn einer nen Tip hat wie man das mit der Rekrusion am besten lösen kann Brauche wie nen Ansatz
Gruß
daniel_sun