Smarty::SCOPE_LOCAL, 'parent' => Smarty::SCOPE_PARENT, 'root' => Smarty::SCOPE_ROOT, 'global' => Smarty::SCOPE_GLOBAL, 'tpl_root' => Smarty::SCOPE_TPL_ROOT, 'smarty' => Smarty::SCOPE_SMARTY); /** * Compiles code for the {assign} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code * @throws \SmartyCompilerException */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { // 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'); $this->mapCache = array(); $_nocache = false; // check and get attributes $_attr = $this->getAttributes($compiler, $args); // nocache ? if ($_var = $compiler->getId($_attr[ 'var' ])) { $_var = "'{$_var}'"; } else { $_var = $_attr[ 'var' ]; } if ($compiler->tag_nocache || $compiler->nocache) { $_nocache = true; // create nocache var to make it know for further compiling $compiler->setNocacheInVariable($_attr[ 'var' ]); } // scope setup if ($_attr[ 'noscope' ]) { $_scope = - 1; } else { $_scope = $compiler->convertScope($_attr, $this->valid_scopes); } // optional parameter $_params = ""; if ($_nocache || $_scope) { $_params .= ' ,' . var_export($_nocache, true); } if ($_scope) { $_params .= ' ,' . $_scope; } if (isset($parameter[ 'smarty_internal_index' ])) { $output = "tpl_vars[{$_var}]) ? \$_smarty_tpl->tpl_vars[{$_var}]->value : array();\n"; $output .= "if (!is_array(\$_tmp_array) || \$_tmp_array instanceof ArrayAccess) {\n"; $output .= "settype(\$_tmp_array, 'array');\n"; $output .= "}\n"; $output .= "\$_tmp_array{$parameter['smarty_internal_index']} = {$_attr['value']};\n"; $output .= "\$_smarty_tpl->_assignInScope({$_var}, \$_tmp_array{$_params});\n?>"; } else { $output = "_assignInScope({$_var}, {$_attr['value']}{$_params});\n?>"; } return $output; } }