diff --git a/change_log.txt b/change_log.txt index 7619934c..8b53e105 100644 --- a/change_log.txt +++ b/change_log.txt @@ -1,4 +1,7 @@ ===== SVN trunk ===== +01/12/2010 +- improvement of {debug} tag output + 27/11/2010 -change run output filter before cache file is written. (same as in Smarty2) diff --git a/libs/debug.tpl b/libs/debug.tpl index 2a456ca9..6ec86728 100644 --- a/libs/debug.tpl +++ b/libs/debug.tpl @@ -86,8 +86,9 @@ td { -

Smarty Debug Console - Total Time {$execution_time|string_format:"%.5f"}

+

Smarty Debug Console - {if isset($template_name)}{$template_name|debug_print_var}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}

+{if !empty($template_data)}

included templates & config files (load time in seconds)

@@ -99,6 +100,7 @@ td {
{/foreach}
+{/if}

assigned template variables

@@ -124,13 +126,14 @@ td { {/capture} diff --git a/libs/sysplugins/smarty_internal_debug.php b/libs/sysplugins/smarty_internal_debug.php index 5e586547..efc96ed7 100644 --- a/libs/sysplugins/smarty_internal_debug.php +++ b/libs/sysplugins/smarty_internal_debug.php @@ -1,133 +1,174 @@ parent)) { - $ptr = $ptr->parent; - } - if ($obj instanceof Smarty) { - $smarty = $obj; - } else { - $smarty = $obj->smarty; - } - $_assigned_vars = $ptr->tpl_vars; - ksort($_assigned_vars); - $_config_vars = $ptr->config_vars; - ksort($_config_vars); - $ldelim = $smarty->left_delimiter; - $rdelim = $smarty->right_delimiter; - $smarty->left_delimiter = '{'; - $smarty->right_delimiter = '}'; - $_template = new Smarty_Internal_Template ($smarty->debug_tpl, $smarty); - $_template->caching = false; - $_template->force_compile = false; - $_template->disableSecurity(); - $_template->cache_id = null; - $_template->compile_id = null; - $_template->assign('template_data', self::$template_data); - $_template->assign('assigned_vars', $_assigned_vars); - $_template->assign('config_vars', $_config_vars); - $_template->assign('execution_time', microtime(true) - $smarty->start_time); - echo $_template->getRenderedTemplate(); - $smarty->left_delimiter = $ldelim; - $smarty->right_delimiter = $rdelim; - } + /** + * End logging of cache time + */ + public static function end_cache($template) + { + $key = self::get_key($template); + self::$template_data[$key]['cache_time'] += microtime(true) - self::$template_data[$key]['start_time']; + } + /** + * Opens a window for the Smarty Debugging Consol and display the data + */ + public static function display_debug($obj) + { + // prepare information of assigned variables + $ptr = self::get_debug_vars($obj); + if ($obj instanceof Smarty) { + $smarty = $obj; + } else { + $smarty = $obj->smarty; + } + $_assigned_vars = $ptr->tpl_vars; + ksort($_assigned_vars); + $_config_vars = $ptr->config_vars; + ksort($_config_vars); + $ldelim = $smarty->left_delimiter; + $rdelim = $smarty->right_delimiter; + $smarty->left_delimiter = '{'; + $smarty->right_delimiter = '}'; + $_template = new Smarty_Internal_Template ($smarty->debug_tpl, $smarty); + $_template->caching = false; + $_template->force_compile = false; + $_template->disableSecurity(); + $_template->cache_id = null; + $_template->compile_id = null; + if ($obj instanceof Smarty_Internal_Template) { + $_template->assign('template_name',$obj->resource_type.':'.$obj->resource_name); + } + if ($obj instanceof Smarty) { + $_template->assign('template_data', self::$template_data); + } else { + $_template->assign('template_data', null); + } + $_template->assign('assigned_vars', $_assigned_vars); + $_template->assign('config_vars', $_config_vars); + $_template->assign('execution_time', microtime(true) - $smarty->start_time); + echo $_template->getRenderedTemplate(); + $smarty->left_delimiter = $ldelim; + $smarty->right_delimiter = $rdelim; + } + /* + * Recursively gets variables from all template/data scopes + */ + public static function get_debug_vars($obj, $is_parent = false) + { + $config_vars = $obj->config_vars; + $tpl_vars = array(); + foreach ($obj->tpl_vars as $key => $var) { + $tpl_vars[$key] = clone $var; + if (true) { + if ($obj instanceof Smarty_Internal_Template) { + $tpl_vars[$key]->scope = $obj->resource_type.':'.$obj->resource_name; + } elseif ($obj instanceof Smarty_Data) { + $tpl_vars[$key]->scope = 'Data object'; + } else { + $tpl_vars[$key]->scope = 'Smarty root'; + } + } else { + $tpl_vars[$key]->scope = 'local'; + } + } - /** - * get_key - */ - static function get_key($template) - { - // calculate Uid if not already done - if ($template->templateUid == '') { - $template->getTemplateFilepath(); - } - $key = $template->templateUid; - if (isset(self::$template_data[$key])) { - return $key; - } else { - self::$template_data[$key]['name'] = $template->getTemplateFilepath(); - self::$template_data[$key]['compile_time'] = 0; - self::$template_data[$key]['render_time'] = 0; - self::$template_data[$key]['cache_time'] = 0; - return $key; - } - } -} + if (isset($obj->parent)) { + $parent = self::get_debug_vars($obj->parent, true); + $tpl_vars = array_merge($parent->tpl_vars, $tpl_vars); + $config_vars = array_merge($parent->config_vars, $config_vars); + } else { + foreach (Smarty::$global_tpl_vars as $name => $var) { + if (!array_key_exists($name, $tpl_vars)) { + $clone = clone $var; + $clone->scope = 'Global'; + $tpl_vars[$name] = $clone; + } + } + } + return (object) array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars); + } + + /** + * get_key + */ + static function get_key($template) + { + // calculate Uid if not already done + if ($template->templateUid == '') { + $template->getTemplateFilepath(); + } + $key = $template->templateUid; + if (isset(self::$template_data[$key])) { + return $key; + } else { + self::$template_data[$key]['name'] = $template->getTemplateFilepath(); + self::$template_data[$key]['compile_time'] = 0; + self::$template_data[$key]['render_time'] = 0; + self::$template_data[$key]['cache_time'] = 0; + return $key; + } + } +} ?> \ No newline at end of file