From 43d73f81c93ceda3b3380058135169dc340a7146 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Hojtsy?= Date: Tue, 28 Aug 2007 11:35:34 +0000 Subject: #166071 by jjeff and dvessel: move default template preprocess code to template_preprocess, and add *lots* of documentation to template files and functions --- includes/theme.inc | 75 +++++++++++++++++++++++---- modules/node/node.tpl.php | 56 +++++++++++++++++--- modules/system/block.tpl.php | 31 ++++++++++- modules/system/page.tpl.php | 6 +-- themes/engines/phptemplate/phptemplate.engine | 26 ---------- 5 files changed, 145 insertions(+), 49 deletions(-) diff --git a/includes/theme.inc b/includes/theme.inc index d1e4f6e66..c9e41401e 100644 --- a/includes/theme.inc +++ b/includes/theme.inc @@ -270,9 +270,7 @@ function _theme_process_registry(&$cache, $name, $type, $theme, $path) { } } - // It would be too much of a performance hit to let every module have - // a generic preprocess function; themes and theme engines can do that. - if ($type != 'module' && function_exists($prefix .'_preprocess')) { + if (function_exists($prefix .'_preprocess')) { $info['preprocess functions'][] = $prefix .'_preprocess'; } if (function_exists($prefix .'_preprocess_'. $hook)) { @@ -1591,9 +1589,45 @@ function _theme_table_cell($cell, $header = FALSE) { } /** - * Prepare the variables passed to the page.tpl.php template. Uses the arg() - * function to generate a series of page template files suggestions based on - * the current path. + * Adds a default set of helper variables for preprocess functions and + * templates. This comes in before any other preprocess function which makes + * it possible to be used in default theme implementations (non-overriden + * theme functions). + */ +function template_preprocess(&$variables, $hook) { + global $user; + static $count = array(); + + // Track run count for each hook to provide zebra striping. + // See "template_preprocess_block()" which provides the same feature for sidebar blocks. + $count[$hook] = isset($count[$hook]) && is_int($count[$hook]) ? $count[$hook] : 1; + $variables['zebra'] = ($count[$hook] % 2) ? 'odd' : 'even'; + $variables['id'] = $count[$hook]++; + + // Tell all templates where they are located. + $variables['directory'] = path_to_theme(); + // Flag front page status. + $variables['is_front'] = drupal_is_front_page(); + // Tell all templates by which kind of user they're viewed. + $variables['logged_in'] = ($user->uid > 0); + $variables['is_admin'] = user_access('access administration pages'); +} + +/** + * Process variables for page.tpl.php + * + * Most themes utilize their own copy of page.tpl.php. The default is located + * inside "modules/system/page.tpl.php". Look in there for the full list of + * variables. + * + * Uses the arg() function to generate a series of page template suggestions + * based on the current path. + * + * The $variables array contains the following arguments: + * - $content + * - $show_blocks + * + * @see page.tpl.php */ function template_preprocess_page(&$variables) { /* Set title and breadcrumb to declared values */ @@ -1744,9 +1778,19 @@ function template_preprocess_page(&$variables) { } } -/* - * Prepare the values passed to the theme_node function to be passed - * into standard template files. +/** + * Process variables for node.tpl.php + * + * Most themes utilize their own copy of node.tpl.php. The default is located + * inside "modules/node/node.tpl.php". Look in there for the full list of + * variables. + * + * The $variables array contains the following arguments: + * - $node + * - $teaser + * - $page + * + * @see node.tpl.php */ function template_preprocess_node(&$variables) { $node = $variables['node']; @@ -1786,15 +1830,26 @@ function template_preprocess_node(&$variables) { $variables['submitted'] = ''; $variables['picture'] = ''; } - + // Clean up name so there are no underscores. $variables['template_files'][] = 'node-'. $node->type; } /** + * Process variables for block.tpl.php + * * Prepare the values passed to the theme_block function to be passed * into a pluggable template engine. Uses block properties to generate a * series of template file suggestions. If none are found, the default * block.tpl.php is used. + * + * Most themes utilize their own copy of page.tpl.php. The default is located + * inside "modules/system/block.tpl.php". Look in there for the full list of + * variables. + * + * The $variables array contains the following arguments: + * - $block + * + * @see block.tpl.php */ function template_preprocess_block(&$variables) { global $sidebar_indicator; diff --git a/modules/node/node.tpl.php b/modules/node/node.tpl.php index 8813f35fc..a2b8c021d 100644 --- a/modules/node/node.tpl.php +++ b/modules/node/node.tpl.php @@ -1,11 +1,58 @@
- +

@@ -23,10 +70,5 @@
- - + \ No newline at end of file diff --git a/modules/system/block.tpl.php b/modules/system/block.tpl.php index 52bf62b10..3b60cf9f0 100644 --- a/modules/system/block.tpl.php +++ b/modules/system/block.tpl.php @@ -1,11 +1,38 @@ subject: Block title. + * - $block->content: Block content. + * - $block->module: Module that generated the block. + * - $block->delta: This is a numeric id connected to each module. + * - $block->region: The block region embedding the current block. + * + * Helper variables: + * - $block_zebra: Outputs 'odd' and 'even' dependent on the default sidebar + * block regions. + * - $zebra: Same output as $block_zebra but independent of any block region. + * - $block_id: counter within the default sidebar block regions. + * - $id: Same output as $block_id but independent of any block region. + * - $is_front: Flags true when presented in the front page. + * - $logged_in: Flags true when the current user is a logged-in member. + * - $is_admin: Flags true when the current user is an administrator. + * + * @see template_preprocess() + * @see template_preprocess_block() + */ ?>
- subject): ?>

subject ?>

-
content ?>
+
+ content ?> +
diff --git a/modules/system/page.tpl.php b/modules/system/page.tpl.php index a71b18d8f..d6ee32686 100644 --- a/modules/system/page.tpl.php +++ b/modules/system/page.tpl.php @@ -14,7 +14,7 @@ * - $css: An array of CSS files for the current page. * - $directory: The directory the theme is located in, e.g. themes/garland or * themes/garland/minelli. - * - $is_front: TRUE if the current page is the front page. + * - $is_front: TRUE if the current page is the front page. Used to toggle the mission statement. * - $logged_in: TRUE if the user is registered and signed in. * - $is_admin: TRUE if the user has permission to access administration pages. * @@ -30,8 +30,6 @@ * - $body_classes: A set of CSS classes for the BODY tag. This contains flags * indicating the current layout (multiple columns, single column), the current * path, whether the user is logged in, and so on. - * - $is_front: True if the front page is currently being displayed. Used to - * toggle the mission. * * Site identity: * - $logo: The path to the logo image, as defined in theme configuration. @@ -69,8 +67,8 @@ * - $closure: Final closing markup from any modules that have altered the page. * This variable should always be output last, after all other dynamic content. * + * @see template_preprocess() * @see template_preprocess_page() - * @see phptemplate_engine_preprocess() */ ?> uid > 0); - $variables['is_admin'] = user_access('access administration pages'); -} -- cgit v1.2.3