diff --git a/change_log.txt b/change_log.txt index ab03140d..90549c0c 100644 --- a/change_log.txt +++ b/change_log.txt @@ -3,6 +3,7 @@ - bugfix removed debug echo output while compiling template inheritance - bugfix relative paths in $template_dir broke relative path resolving in {include "../foo.tpl"} - bugfix {include} did not work inside nested {block} tags +- bugfix {assign} with scope root and global did not work in all cases 19.09.2011 - bugfix regression in Smarty_CacheReource_KeyValueStore introduced by r4261 diff --git a/libs/sysplugins/smarty_internal_compile_assign.php b/libs/sysplugins/smarty_internal_compile_assign.php index 3cc3e144..40e46862 100644 --- a/libs/sysplugins/smarty_internal_compile_assign.php +++ b/libs/sysplugins/smarty_internal_compile_assign.php @@ -60,11 +60,15 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase { } else { $output = "tpl_vars[$_attr[var]] = new Smarty_variable($_attr[value], $_nocache, $_scope);"; } - if ($_scope != Smarty::SCOPE_LOCAL) { - $output .= "\nif (\$tmp_ptr = &\$_smarty_tpl->getScope($_scope) != null) \$tmp_ptr[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];?>"; - } else { - $output .= '?>'; + if ($_scope == Smarty::SCOPE_PARENT) { + $output .= "\nif (\$_smarty_tpl->parent != null) \$_smarty_tpl->parent->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; + } elseif ($_scope == Smarty::SCOPE_ROOT || $_scope == Smarty::SCOPE_GLOBAL) { + $output .= "\n\$_ptr = \$_smarty_tpl->parent; while (\$_ptr != null) {\$_ptr->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]]; \$_ptr = \$_ptr->parent; }"; } + if ( $_scope == Smarty::SCOPE_GLOBAL) { + $output .= "\nSmarty::\$global_tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; + } + $output .= '?>'; return $output; }