mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-04 18:34:27 +02:00
- improve template scope handling
This commit is contained in:
55
libs/sysplugins/smarty_internal_runtime_updatescope.php
Normal file
55
libs/sysplugins/smarty_internal_runtime_updatescope.php
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runtime Methods updateScope
|
||||||
|
*
|
||||||
|
* @package Smarty
|
||||||
|
* @subpackage PluginsInternal
|
||||||
|
* @author Uwe Tews
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
class Smarty_Internal_Runtime_UpdateScope
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Update new assigned template variable in other effected scopes
|
||||||
|
*
|
||||||
|
* @param \Smarty_Internal_Template $tpl template object
|
||||||
|
* @param string $varName variable name
|
||||||
|
* @param int $scope scope to which bubble up variable value
|
||||||
|
*/
|
||||||
|
public function updateScope(\Smarty_Internal_Template $tpl, $varName, $scope = Smarty::SCOPE_LOCAL)
|
||||||
|
{
|
||||||
|
if (!$scope && !$tpl->scope) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
foreach (array($scope, $tpl->scope) as $s) {
|
||||||
|
$s = ($bubble_up = $s >= Smarty::SCOPE_BUBBLE_UP) ? $s - Smarty::SCOPE_BUBBLE_UP : $s;
|
||||||
|
if ($bubble_up && $s) {
|
||||||
|
$ptr = $tpl->parent;
|
||||||
|
if (isset($ptr)) {
|
||||||
|
$ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
|
||||||
|
$ptr = $ptr->parent;
|
||||||
|
}
|
||||||
|
if ($s == Smarty::SCOPE_PARENT) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
while (isset($ptr) && $ptr->_objType == 2) {
|
||||||
|
$ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
|
||||||
|
$ptr = $ptr->parent;
|
||||||
|
}
|
||||||
|
if ($s == Smarty::SCOPE_TPL_ROOT) {
|
||||||
|
continue;
|
||||||
|
} elseif ($s == Smarty::SCOPE_SMARTY) {
|
||||||
|
$tpl->smarty->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
|
||||||
|
} elseif ($s == Smarty::SCOPE_GLOBAL) {
|
||||||
|
Smarty::$global_tpl_vars[$varName] = $tpl->tpl_vars[$varName];
|
||||||
|
} elseif ($s == Smarty::SCOPE_ROOT) {
|
||||||
|
while (isset($ptr->parent)) {
|
||||||
|
$ptr = $ptr->parent;
|
||||||
|
}
|
||||||
|
$ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user