From 80af6ea2b511122f9007cf90ec91ef010f80331c Mon Sep 17 00:00:00 2001 From: uwetews Date: Fri, 30 Sep 2016 02:30:39 +0200 Subject: [PATCH] - improvement new Smarty::$extends_recursion property to disable execution of {extends} in templates called by extends resource https://github.com/smarty-php/smarty/issues/296 --- libs/sysplugins/smarty_internal_resource_extends.php | 5 +++-- libs/sysplugins/smarty_internal_runtime_getincludepath.php | 2 +- libs/sysplugins/smarty_internal_runtime_inheritance.php | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/libs/sysplugins/smarty_internal_resource_extends.php b/libs/sysplugins/smarty_internal_resource_extends.php index 4a712e52..4f1f09ea 100644 --- a/libs/sysplugins/smarty_internal_resource_extends.php +++ b/libs/sysplugins/smarty_internal_resource_extends.php @@ -37,10 +37,11 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource $uid = ''; $sources = array(); $components = explode('|', $source->name); + $smarty = &$source->smarty; $exists = true; foreach ($components as $component) { /* @var \Smarty_Template_Source $_s */ - $_s = Smarty_Template_Source::load(null, $source->smarty, $component); + $_s = Smarty_Template_Source::load(null, $smarty, $component); if ($_s->type == 'php') { throw new SmartyException("Resource type {$_s->type} cannot be used with the extends resource type"); } @@ -85,7 +86,7 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource public function getContent(Smarty_Template_Source $source) { if (!$source->exists) { - throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); + throw new SmartyException("Unable to load template '{$source->type}:{$source->name}'"); } $_components = array_reverse($source->components); diff --git a/libs/sysplugins/smarty_internal_runtime_getincludepath.php b/libs/sysplugins/smarty_internal_runtime_getincludepath.php index e12b0c57..4c1f7548 100644 --- a/libs/sysplugins/smarty_internal_runtime_getincludepath.php +++ b/libs/sysplugins/smarty_internal_runtime_getincludepath.php @@ -87,7 +87,7 @@ class Smarty_Internal_Runtime_GetIncludePath $_dirs = (array) explode(PATH_SEPARATOR, $_i_path); foreach ($_dirs as $_path) { if (is_dir($_path)) { - $this->_include_dirs[] = $smarty->_realpath($_path . $smarty->ds, true); + $this->_include_dirs[] = $smarty->_realpath($_path . $smarty->ds); } } return true; diff --git a/libs/sysplugins/smarty_internal_runtime_inheritance.php b/libs/sysplugins/smarty_internal_runtime_inheritance.php index e49b9889..66c38407 100644 --- a/libs/sysplugins/smarty_internal_runtime_inheritance.php +++ b/libs/sysplugins/smarty_internal_runtime_inheritance.php @@ -111,7 +111,7 @@ class Smarty_Internal_Runtime_Inheritance ob_end_clean(); $this->state = 2; } - if (isset($template) && ($tpl->parent->source->type !== 'extends' || $tpl->smarty->extends_recursion)) { + if (isset($template) && (($tpl->parent->_isTplObj() && $tpl->parent->source->type !== 'extends') || $tpl->smarty->extends_recursion)) { $tpl->_subTemplateRender($template, $tpl->cache_id, $tpl->compile_id, $tpl->caching ? 9999 : 0, $tpl->cache_lifetime, array(), 2, false, $uid, $func); }