diff options
author | emkael <emkael@tlen.pl> | 2016-10-11 14:01:29 +0200 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2016-10-11 14:01:29 +0200 |
commit | 51609351f2c4b5082b7e6f0744cd3811c325303f (patch) | |
tree | 739015e9ec69bc185ebe30db21369ae0b8b692ce /lib/smarty/sysplugins/smarty_internal_compile_assign.php | |
parent | 8d1b0dad63e3906efa9393ef01d08b77d83417b5 (diff) |
* initial template
Diffstat (limited to 'lib/smarty/sysplugins/smarty_internal_compile_assign.php')
-rw-r--r-- | lib/smarty/sysplugins/smarty_internal_compile_assign.php | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/smarty/sysplugins/smarty_internal_compile_assign.php b/lib/smarty/sysplugins/smarty_internal_compile_assign.php new file mode 100644 index 0000000..40e4686 --- /dev/null +++ b/lib/smarty/sysplugins/smarty_internal_compile_assign.php @@ -0,0 +1,77 @@ +<?php +/** + * Smarty Internal Plugin Compile Assign + * + * Compiles the {assign} tag + * + * @package Smarty + * @subpackage Compiler + * @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 + * @return string compiled code + */ + public function compile($args, $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'); + $_nocache = 'null'; + $_scope = Smarty::SCOPE_LOCAL; + // check and get attributes + $_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'], "'\""); + if ($_attr['scope'] == 'parent') { + $_scope = Smarty::SCOPE_PARENT; + } elseif ($_attr['scope'] == 'root') { + $_scope = Smarty::SCOPE_ROOT; + } elseif ($_attr['scope'] == 'global') { + $_scope = Smarty::SCOPE_GLOBAL; + } else { + $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno); + } + } + // compiled output + if (isset($parameter['smarty_internal_index'])) { + $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_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; + } + +} + +?>
\ No newline at end of file |