diff options
Diffstat (limited to 'lib/smarty3/sysplugins/smarty_internal_runtime_make_nocache.php')
-rw-r--r-- | lib/smarty3/sysplugins/smarty_internal_runtime_make_nocache.php | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/smarty3/sysplugins/smarty_internal_runtime_make_nocache.php b/lib/smarty3/sysplugins/smarty_internal_runtime_make_nocache.php new file mode 100644 index 0000000..dd9e15f --- /dev/null +++ b/lib/smarty3/sysplugins/smarty_internal_runtime_make_nocache.php @@ -0,0 +1,56 @@ +<?php + +/** + * {make_nocache} Runtime Methods save(), store() + * + * @package Smarty + * @subpackage PluginsInternal + * @author Uwe Tews + * + */ +class Smarty_Internal_Runtime_Make_Nocache +{ + + /** + * Save current variable value while rendering compiled template and inject nocache code to + * assign variable value in cahed template + * + * @param \Smarty_Internal_Template $tpl + * @param string $var variable name + * + * @throws \SmartyException + */ + public function save(Smarty_Internal_Template $tpl, $var) + { + if (isset($tpl->tpl_vars[ $var ])) { + $export = preg_replace('/^Smarty_Variable::__set_state[(]|\s|[)]$/', '', + var_export($tpl->tpl_vars[ $var ], true)); + if (preg_match('/(\w+)::__set_state/', $export, $match)) { + throw new SmartyException("{make_nocache \${$var}} in template '{$tpl->source->name}': variable does contain object '{$match[1]}' not implementing method '__set_state'"); + } + echo "/*%%SmartyNocache:{$tpl->compiled->nocache_hash}%%*/<?php " . + addcslashes("\$_smarty_tpl->smarty->ext->_make_nocache->store(\$_smarty_tpl, '{$var}', " . $export, + '\\') . ");?>\n/*/%%SmartyNocache:{$tpl->compiled->nocache_hash}%%*/"; + } + } + + /** + * Store variable value saved while rendering compiled template in cached template context + * + * @param \Smarty_Internal_Template $tpl + * @param string $var variable name + * @param array $properties + */ + public function store(Smarty_Internal_Template $tpl, $var, $properties) + { + // do not overwrite existing nocache variables + if (!isset($tpl->tpl_vars[ $var ]) || !$tpl->tpl_vars[ $var ]->nocache) { + $newVar = new Smarty_Variable(); + unset($properties[ 'nocache' ]); + foreach ($properties as $k => $v) { + $newVar->$k = $v; + } + $tpl->tpl_vars[ $var ] = $newVar; + } + } +} |