diff options
Diffstat (limited to 'libs/sysplugins/smarty_internal_compile_assign.php')
| -rw-r--r-- | libs/sysplugins/smarty_internal_compile_assign.php | 55 |
1 files changed, 32 insertions, 23 deletions
diff --git a/libs/sysplugins/smarty_internal_compile_assign.php b/libs/sysplugins/smarty_internal_compile_assign.php index 8d8c643a..3cc3e144 100644 --- a/libs/sysplugins/smarty_internal_compile_assign.php +++ b/libs/sysplugins/smarty_internal_compile_assign.php @@ -1,44 +1,46 @@ <?php - /** * Smarty Internal Plugin Compile Assign - * + * * Compiles the {assign} tag - * + * * @package Smarty * @subpackage Compiler - * @author Uwe Tews + * @author Uwe Tews */ /** * Smarty Internal Plugin Compile Assign Class + * + * @package Smarty + * @subpackage Compiler */ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase { + /** * Compiles code for the {assign} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter + * + * @param array $args array with attributes from parser + * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ public function compile($args, $compiler, $parameter) { - $this->compiler = $compiler; // the following must be assigned at runtime because it will be overwritten in Smarty_Internal_Compile_Append $this->required_attributes = array('var', 'value'); $this->shorttag_order = array('var', 'value'); $this->optional_attributes = array('scope'); $_nocache = 'null'; - $_scope = 'null'; + $_scope = Smarty::SCOPE_LOCAL; // check and get attributes - $_attr = $this->_get_attributes($args); - // nocache ? - if ($this->compiler->tag_nocache || $this->compiler->nocache) { - $_nocache = 'true'; + $_attr = $this->getAttributes($compiler, $args); + // nocache ? + if ($compiler->tag_nocache || $compiler->nocache) { + $_nocache = 'true'; // create nocache var to make it know for further compiling $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_variable(null, true); - } + } // scope setup if (isset($_attr['scope'])) { $_attr['scope'] = trim($_attr['scope'], "'\""); @@ -49,16 +51,23 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase { } elseif ($_attr['scope'] == 'global') { $_scope = Smarty::SCOPE_GLOBAL; } else { - $this->compiler->trigger_template_error('illegal value for "scope" attribute', $this->compiler->lex->taglineno); - } - } + $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno); + } + } // compiled output if (isset($parameter['smarty_internal_index'])) { - return "<?php if (!isset(\$_smarty_tpl->tpl_vars[$_attr[var]]) || !is_array(\$_smarty_tpl->tpl_vars[$_attr[var]]->value)) \$_smarty_tpl->createLocalArrayVariable($_attr[var], $_nocache, $_scope);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$parameter[smarty_internal_index] = $_attr[value];?>"; + $output = "<?php \$_smarty_tpl->createLocalArrayVariable($_attr[var], $_nocache, $_scope);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$parameter[smarty_internal_index] = $_attr[value];"; + } else { + $output = "<?php \$_smarty_tpl->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 { - return "<?php \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_variable($_attr[value], $_nocache, $_scope);?>"; - } - } -} + $output .= '?>'; + } + return $output; + } + +} ?>
\ No newline at end of file |
