diff --git a/change_log.txt b/change_log.txt index 298d9a7b..ecf14adb 100644 --- a/change_log.txt +++ b/change_log.txt @@ -1,6 +1,7 @@ ===== trunk ===== 13.10.2013 - bugfix variable names on {include} in template inheritance did unextepted error message (forum topic 24585) (Issue 161) + - bugfix variable names on {include} in template inheritance did unextepted error message (forum topic 24594) (Issue 161) +.- bugfix relative includes with same name like {include './foo.tpl'} from different folder failed (forum topic 24590)(Issue 161) 04.10.2013 - bugfix variable file names at {extends} had been disbabled by mistake with the rewrite of diff --git a/libs/sysplugins/smarty_internal_template.php b/libs/sysplugins/smarty_internal_template.php index d60fc6bf..c2bf4501 100644 --- a/libs/sysplugins/smarty_internal_template.php +++ b/libs/sysplugins/smarty_internal_template.php @@ -243,7 +243,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { // already in template cache? if ($this->smarty->allow_ambiguous_resources) { - $_templateId = Smarty_Resource::getUniqueTemplateName($this->smarty, $template) . $cache_id . $compile_id; + $_templateId = Smarty_Resource::getUniqueTemplateName($this, $template) . $cache_id . $compile_id; } else { $_templateId = $this->smarty->joined_template_dir . '#' . $template . $cache_id . $compile_id; } diff --git a/libs/sysplugins/smarty_resource.php b/libs/sysplugins/smarty_resource.php index 0cb4ce0b..8a6ea11a 100644 --- a/libs/sysplugins/smarty_resource.php +++ b/libs/sysplugins/smarty_resource.php @@ -491,17 +491,21 @@ abstract class Smarty_Resource /** * modify template_resource according to resource handlers specifications * - * @param string $smarty Smarty instance + * @param Smarty_Internal_template $template Smarty instance * @param string $template_resource template_resource to extracate resource handler and name of * @return string unique resource name */ - public static function getUniqueTemplateName($smarty, $template_resource) + public static function getUniqueTemplateName($template, $template_resource) { - self::parseResourceName($template_resource, $smarty->default_resource_type, $name, $type); + self::parseResourceName($template_resource, $template->smarty->default_resource_type, $name, $type); // TODO: optimize for Smarty's internal resource types - $resource = Smarty_Resource::load($smarty, $type); - - return $resource->buildUniqueResourceName($smarty, $name); + $resource = Smarty_Resource::load($template->smarty, $type); + // go relative to a given template? + $_file_is_dotted = $name[0] == '.' && ($name[1] == '.' || $name[1] == '/' || $name[1] == "\\"); + if ($template instanceof Smarty_Internal_Template && $_file_is_dotted && ($template->source->type == 'file' || $template->parent->source->type == 'extends')) { + $name = dirname($template->source->filepath) . DS . $name; + } + return $resource->buildUniqueResourceName($template->smarty, $name); } /** @@ -524,7 +528,12 @@ abstract class Smarty_Resource // parse resource_name, load resource handler, identify unique resource name self::parseResourceName($template_resource, $smarty->default_resource_type, $name, $type); $resource = Smarty_Resource::load($smarty, $type); - $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name); + // go relative to a given template? + $_file_is_dotted = $name[0] == '.' && ($name[1] == '.' || $name[1] == '/' || $name[1] == "\\"); + if ($_template->parent instanceof Smarty_Internal_Template && $_file_is_dotted && ($_template->parent->source->type == 'file' || $_template->parent->source->type == 'extends')) { + $name2 = dirname($_template->parent->source->filepath) . DS . $name; + } + $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name2); // check runtime cache $_cache_key = 'template|' . $unique_resource_name;