da es sich um arrays handelt, lässt sich das wohl auch gar nicht anders lösen.
bei mir sieht das template im moment so aus:
Das erlaubt leider noch keine Schachtelung.
Da muss ich bei dem preg_replace_callback pattern noch ein bisschen mit asserts rumspielen
Bisher habe ich allerdings auch nur eine Ebene.
bei mir sieht das template im moment so aus:
Code:
{foreach from="arrayname" as="foobar"} {$foobar.field1} <br> {$foobar.field2} <br> {/foreach}
PHP-Code:
<?php
// der array dazu:
$arr1 = Array('field1' => 'feld1 aus array1', 'field2' => 'feld2 aus array1');
$arr2 = Array('field1' => 'feld1 aus array2', 'field2' => 'feld2 aus array2');
$tpl->assign('arrayname', Array(&$arr2, &$arr1));
// in der parse funktion:
$pattern = '%'.$tag_start.'foreach from\="(\w+)" as\="(\w+)"'.$tag_end.'(.*)'.$tag_start.'/foreach'.$tag_end.'%s';
// replace {foreach} 's
$string = preg_replace_callback($pattern, array(&$this, '_replace_foreach'), $string);
// in der _replace_foreach funktion:
function _replace_foreach($a)
{
// start returned string.
$string = "";
$from = $a[1];
$as = "__" . $a[2];
$parse = $a[3];
// replace the varnames in the foreach loop in the string to parse (avoid collision with assigned vars)
$parse = str_replace('{$', '{$__', $parse);
foreach($this->_vars[$from] AS $key => $val)
{
$this->assign($as, $this->_vars[$from][$key]);
$string .= $this->_parse($parse);
}
return $string;
}
?>
Da muss ich bei dem preg_replace_callback pattern noch ein bisschen mit asserts rumspielen
Bisher habe ich allerdings auch nur eine Ebene.
Kommentar