From a98d83bbf38ab0558bb561b6de76fc10ef4364a3 Mon Sep 17 00:00:00 2001 From: "uwe.tews@googlemail.com" Date: Sat, 24 Sep 2011 18:20:13 +0000 Subject: [PATCH] - improvment better error message for undefined templates at {include} --- change_log.txt | 1 + .../smarty_internal_resource_php.php | 41 +++++++++++-------- libs/sysplugins/smarty_internal_template.php | 7 +++- .../smarty_internal_templatebase.php | 7 +++- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/change_log.txt b/change_log.txt index 2c473f76..a34a184f 100644 --- a/change_log.txt +++ b/change_log.txt @@ -3,6 +3,7 @@ - removed internal muteExpectedErrors() calls in favor of having the implementor call this once from his application - optimized muteExpectedErrors() to pass errors to the latest registered error handler, if appliccable - added compile_dir and cache_dir to list of muted directories +- improvment better error message for undefined templates at {include} 23.09.2011 - remove unused properties diff --git a/libs/sysplugins/smarty_internal_resource_php.php b/libs/sysplugins/smarty_internal_resource_php.php index bfa74d05..7cd8baee 100644 --- a/libs/sysplugins/smarty_internal_resource_php.php +++ b/libs/sysplugins/smarty_internal_resource_php.php @@ -2,12 +2,12 @@ /** * Smarty Internal Plugin Resource PHP - * + * * Implements the file system as resource for PHP templates - * + * * @package Smarty * @subpackage TemplateResources - * @author Uwe Tews + * @author Uwe Tews * @author Rodney Rehm */ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled { @@ -16,7 +16,7 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled { * @var string */ protected $short_open_tag; - + /** * Create a new PHP Resource * @@ -24,8 +24,8 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled { public function __construct() { $this->short_open_tag = ini_get( 'short_open_tag' ); - } - + } + /** * populate Source Object with meta data from Resource * @@ -41,7 +41,7 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled { if (is_object($source->smarty->security_policy)) { $source->smarty->security_policy->isTrustedResourceDir($source->filepath); } - + $source->uid = sha1($source->filepath); if ($source->smarty->compile_check) { $source->timestamp = @filemtime($source->filepath); @@ -49,7 +49,7 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled { } } } - + /** * populate Source Object with timestamp and exists from Resource * @@ -64,7 +64,7 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled { /** * Load template's source from file into current template object - * + * * @param Smarty_Template_Source $source source object * @return string template source * @throws SmartyException if source cannot be loaded @@ -75,7 +75,7 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled { return ''; } throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); - } + } /** * Render and output the template (without using the compiler) @@ -88,22 +88,27 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled { public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template) { $_smarty_template = $_template; - + if (!$source->smarty->allow_php_templates) { throw new SmartyException("PHP templates are disabled"); - } + } if (!$source->exists) { - throw new SmartyException("Unable to load template \"{$source->type} : {$source->name}\""); - } - + if ($_template->parent instanceof Smarty_Internal_Template) { + $parent_resource = " in '{$_template->parent->template_resource}'"; + } else { + $parent_resource = ''; + } + throw new SmartyException("Unable to load template {$source->type} '{$source->name}'{$parent_resource}"); + } + // prepare variables extract($_template->getTemplateVars()); - + // include PHP template with short open tags enabled ini_set( 'short_open_tag', '1' ); include($source->filepath); ini_set( 'short_open_tag', $this->short_open_tag ); - } -} + } +} ?> \ No newline at end of file diff --git a/libs/sysplugins/smarty_internal_template.php b/libs/sysplugins/smarty_internal_template.php index 3a667db8..cb7717ac 100644 --- a/libs/sysplugins/smarty_internal_template.php +++ b/libs/sysplugins/smarty_internal_template.php @@ -137,7 +137,12 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { public function mustCompile() { if (!$this->source->exists) { - throw new SmartyException("Unable to load template {$this->source->type} '{$this->source->name}'"); + if ($this->parent instanceof Smarty_Internal_Template) { + $parent_resource = " in '$this->parent->template_resource}'"; + } else { + $parent_resource = ''; + } + throw new SmartyException("Unable to load template {$this->source->type} '{$this->source->name}'{$parent_resource}"); } if ($this->mustCompile === null) { $this->mustCompile = (!$this->source->uncompiled && ($this->smarty->force_compile || $this->source->recompiled || $this->compiled->timestamp === false || diff --git a/libs/sysplugins/smarty_internal_templatebase.php b/libs/sysplugins/smarty_internal_templatebase.php index 757fb543..954ad1be 100644 --- a/libs/sysplugins/smarty_internal_templatebase.php +++ b/libs/sysplugins/smarty_internal_templatebase.php @@ -116,7 +116,12 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data { } // checks if template exists if (!$_template->source->exists) { - throw new SmartyException("Unable to load template {$_template->source->type} '{$_template->source->name}'"); + if ($_template->parent instanceof Smarty_Internal_Template) { + $parent_resource = " in '{$_template->parent->template_resource}'"; + } else { + $parent_resource = ''; + } + throw new SmartyException("Unable to load template {$_template->source->type} '{$_template->source->name}'{$parent_resource}"); } // read from cache or render if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || !$_template->cached->valid) {