function _theme_render_template_debug

Renders a template for any engine.

Includes the possibility to get debug output by setting the theme_debug variable to TRUE.

Parameters

string $template_function: The function to call for rendering the template.

string $template_file: The filename of the template to render.

array $variables: A keyed array of variables that will appear in the output.

string $extension: The extension used by the theme engine for template files.

Return value

string The output generated by the template including debug information.

1 call to _theme_render_template_debug()
theme in includes/theme.inc
Generates themed output.

File

includes/theme.inc, line 1550

Code

function _theme_render_template_debug($template_function, $template_file, $variables, $extension) {
    $output = array(
        'debug_prefix' => '',
        'debug_info' => '',
        'rendered_markup' => call_user_func($template_function, $template_file, $variables),
        'debug_suffix' => '',
    );
    $output['debug_prefix'] .= "\n\n<!-- THEME DEBUG -->";
    $output['debug_prefix'] .= "\n<!-- CALL: theme('" . check_plain($variables['theme_hook_original']) . "') -->";
    // If there are theme suggestions, reverse the array so more specific
    // suggestions are shown first.
    if (!empty($variables['theme_hook_suggestions'])) {
        $variables['theme_hook_suggestions'] = array_reverse($variables['theme_hook_suggestions']);
    }
    // Add debug output for directly called suggestions like
    // '#theme' => 'comment__node__article'.
    if (strpos($variables['theme_hook_original'], '__') !== FALSE) {
        $derived_suggestions[] = $hook = $variables['theme_hook_original'];
        while ($pos = strrpos($hook, '__')) {
            $hook = substr($hook, 0, $pos);
            $derived_suggestions[] = $hook;
        }
        // Get the value of the base hook (last derived suggestion) and append it
        // to the end of all theme suggestions.
        $base_hook = array_pop($derived_suggestions);
        $variables['theme_hook_suggestions'] = array_merge($derived_suggestions, $variables['theme_hook_suggestions']);
        $variables['theme_hook_suggestions'][] = $base_hook;
    }
    if (!empty($variables['theme_hook_suggestions'])) {
        $current_template = basename($template_file);
        $suggestions = $variables['theme_hook_suggestions'];
        // Only add the original theme hook if it wasn't a directly called
        // suggestion.
        if (strpos($variables['theme_hook_original'], '__') === FALSE) {
            $suggestions[] = $variables['theme_hook_original'];
        }
        foreach ($suggestions as &$suggestion) {
            $template = strtr($suggestion, '_', '-') . $extension;
            $prefix = $template == $current_template ? 'x' : '*';
            $suggestion = $prefix . ' ' . $template;
        }
        $output['debug_info'] .= "\n<!-- FILE NAME SUGGESTIONS:\n   " . check_plain(implode("\n   ", $suggestions)) . "\n-->";
    }
    $output['debug_info'] .= "\n<!-- BEGIN OUTPUT from '" . check_plain($template_file) . "' -->\n";
    $output['debug_suffix'] .= "\n<!-- END OUTPUT from '" . check_plain($template_file) . "' -->\n\n";
    return implode('', $output);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.