- bugfix in nested {foreach} saved item attributes got overwritten https://github.com/smarty-php/smarty/issues/33

This commit is contained in:
Uwe Tews
2015-05-13 00:33:23 +02:00
parent e4741e9dd7
commit 07c781d9cf
3 changed files with 8 additions and 4 deletions

View File

@@ -208,7 +208,8 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
}
}
}
$output .= "\$foreachItemSav = \$_smarty_tpl->tpl_vars[$item];\n";
$itemName = trim($item,"'\"");
$output .= "\$foreach_{$itemName}_Sav = \$_smarty_tpl->tpl_vars[$item];\n";
$output .= "?>";
return $output;
@@ -239,8 +240,9 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
list($openTag, $nocache, $item, $key, $foo) = $this->closeTag($compiler, array('foreach'));
$this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $item, $key, false));
$itemName = trim($item,"'\"");
$output = "<?php\n";
$output .= "\$_smarty_tpl->tpl_vars[$item] = \$foreachItemSav;\n";
$output .= "\$_smarty_tpl->tpl_vars[$item] = \$foreach_{$itemName}_Sav;\n";
$output .= "}\n";
$output .= "if (!\$_smarty_tpl->tpl_vars[$item]->_loop) {\n?>";
return $output;
@@ -274,9 +276,10 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
}
list($openTag, $compiler->nocache, $item, $key, $restore) = $this->closeTag($compiler, array('foreach', 'foreachelse'));
$itemName = trim($item,"'\"");
$output = "<?php\n";
if ($restore) {
$output .= "\$_smarty_tpl->tpl_vars[$item] = \$foreachItemSav;\n";
$output .= "\$_smarty_tpl->tpl_vars[$item] = \$foreach_{$itemName}_Sav;\n";
}
$output .= "}\n?>";