- bugfix and enhancement

Because several recent problems with template inheritance the {block} tag compiler has been rewriten
   - Error messages shown now the correct child template file and line number
   - The compiler could fail on some larger UTF-8 text block (forum topic 24455}
   - The {strip} tag can now be placed outside {block} tags in child templates (forum topic 24289}
- change SmartyException::$escape  is now false by default
- change PHP traceback has been remove for SmartyException and SmartyCompilerException
This commit is contained in:
Uwe.Tews@googlemail.com
2013-08-24 18:46:31 +00:00
parent e206ba63f0
commit 98c1dd29cd
18 changed files with 4576 additions and 4191 deletions
+51 -4
View File
@@ -24,6 +24,27 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
*/
public static $template_data = array();
/**
* List of uid's which shall be ignored
*
* @var array
*/
public static $ignore_uid = array();
/**
* Ignore template
*
* @param object $template
*/
public static function ignore($template)
{
// calculate Uid if not already done
if ($template->source->uid == '') {
$template->source->filepath;
}
self::$ignore_uid[$template->source->uid] = true;
}
/**
* Start logging of compile time
*
@@ -31,7 +52,25 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
*/
public static function start_compile($template)
{
$key = self::get_key($template);
static $_is_stringy = array('string' => true, 'eval' => true);
if (!empty($template->compiler->trace_uid)) {
$key = $template->compiler->trace_uid;
if (!isset(self::$template_data[$key])) {
if (isset($_is_stringy[$template->source->type])) {
self::$template_data[$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\'';
} else {
self::$template_data[$key]['name'] = $template->source->filepath;
}
self::$template_data[$key]['compile_time'] = 0;
self::$template_data[$key]['render_time'] = 0;
self::$template_data[$key]['cache_time'] = 0;
}
} else {
if (isset(self::$ignore_uid[$template->source->uid])) {
return;
}
$key = self::get_key($template);
}
self::$template_data[$key]['start_time'] = microtime(true);
}
@@ -42,7 +81,15 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
*/
public static function end_compile($template)
{
$key = self::get_key($template);
if (!empty($template->compiler->trace_uid)) {
$key = $template->compiler->trace_uid;
} else {
if (isset(self::$ignore_uid[$template->source->uid])) {
return;
}
$key = self::get_key($template);
}
self::$template_data[$key]['compile_time'] += microtime(true) - self::$template_data[$key]['start_time'];
}
@@ -171,7 +218,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
}
}
return (object) array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars);
return (object)array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars);
}
/**
@@ -192,7 +239,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
return $key;
} else {
if (isset($_is_stringy[$template->source->type])) {
self::$template_data[$key]['name'] = '\''.substr($template->source->name,0,25).'...\'';
self::$template_data[$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\'';
} else {
self::$template_data[$key]['name'] = $template->source->filepath;
}