#249532: Allow subthemes to have preprocess hooks without tpl files. Possibly also...
authorJohnAlbin
Mon, 12 May 2008 22:59:59 +0000 (22:59 +0000)
committerJohnAlbin
Mon, 12 May 2008 22:59:59 +0000 (22:59 +0000)
CHANGELOG.txt
STARTERKIT/template.php
zen/template.php
zen_classic/template.php

index 681349f..68b4e91 100644 (file)
@@ -1,6 +1,7 @@
 Zen 6.x-1.x-dev
   * Upgrading to Drupal 6. Not yet complete.
 
+  #249532: Allow subthemes to have preprocess hooks without tpl files
   #223518: Option to show page title in breadcrumbs
   #253249: zen_id_safe fails when first character is extended latin
   #251632: Make the closure region more useful
index e7c43a3..ce32d0e 100644 (file)
@@ -49,6 +49,13 @@ if (theme_get_setting('STARTERKIT_fixed')) {
 
 
 /**
+ * Implementation of HOOK_theme().
+ */
+function STARTERKIT_theme(&$existing, $type, $theme, $path) {
+  return zen_theme($existing, $type, $theme, $path);
+}
+
+/**
  * Override or insert PHPTemplate variables into all templates.
  *
  * @param $vars
@@ -58,9 +65,6 @@ if (theme_get_setting('STARTERKIT_fixed')) {
  */
 /* -- Delete this line if you want to use this function
 function STARTERKIT_preprocess(&$vars, $hook) {
-  // First run Zen's preprocess function.
-  phptemplate_preprocess($vars);
-
   $vars['sample_variable'] = t('Lorem ipsum.');
 }
 // */
@@ -75,9 +79,6 @@ function STARTERKIT_preprocess(&$vars, $hook) {
  */
 /* -- Delete this line if you want to use this function
 function STARTERKIT_preprocess_page(&$vars, $hook) {
-  // First run Zen's preprocess function.
-  phptemplate_preprocess_page($vars);
-
   $vars['sample_variable'] = t('Lorem ipsum.');
 }
 // */
@@ -92,9 +93,6 @@ function STARTERKIT_preprocess_page(&$vars, $hook) {
  */
 /* -- Delete this line if you want to use this function
 function STARTERKIT_preprocess_node(&$vars, $hook) {
-  // First run Zen's preprocess function.
-  phptemplate_preprocess_node($vars);
-
   $vars['sample_variable'] = t('Lorem ipsum.');
 }
 // */
@@ -109,9 +107,6 @@ function STARTERKIT_preprocess_node(&$vars, $hook) {
  */
 /* -- Delete this line if you want to use this function
 function STARTERKIT_preprocess_comment(&$vars, $hook) {
-  // First run Zen's preprocess function.
-  phptemplate_preprocess_comment($vars);
-
   $vars['sample_variable'] = t('Lorem ipsum.');
 }
 // */
@@ -126,9 +121,6 @@ function STARTERKIT_preprocess_comment(&$vars, $hook) {
  */
 /* -- Delete this line if you want to use this function
 function STARTERKIT_preprocess_block(&$vars, $hook) {
-  // First run Zen's preprocess function.
-  phptemplate_preprocess_block($vars);
-
   $vars['sample_variable'] = t('Lorem ipsum.');
 }
 // */
index 0321283..2fff2fc 100644 (file)
@@ -94,7 +94,7 @@ function zen_breadcrumb($breadcrumb) {
  * @param $hook
  *   The name of the theme function being called (name of the .tpl.php file.)
  */
-function phptemplate_preprocess(&$vars, $hook) {
+function zen_preprocess(&$vars, $hook) {
   global $user;
 
   // Set a new $is_admin variable. This is determined by looking at the
@@ -116,7 +116,7 @@ function phptemplate_preprocess(&$vars, $hook) {
  * @param $hook
  *   The name of the theme function being called ("page" in this case.)
  */
-function phptemplate_preprocess_page(&$vars, $hook) {
+function zen_preprocess_page(&$vars, $hook) {
   global $theme;
 
   // These next lines add additional CSS files and redefine
@@ -190,7 +190,7 @@ function phptemplate_preprocess_page(&$vars, $hook) {
  * @param $hook
  *   The name of the theme function being called ("node" in this case.)
  */
-function phptemplate_preprocess_node(&$vars, $hook) {
+function zen_preprocess_node(&$vars, $hook) {
   global $user;
 
   // Special classes for nodes
@@ -226,7 +226,7 @@ function phptemplate_preprocess_node(&$vars, $hook) {
  * @param $hook
  *   The name of the theme function being called ("comment" in this case.)
  */
-function phptemplate_preprocess_comment(&$vars, $hook) {
+function zen_preprocess_comment(&$vars, $hook) {
   global $user;
 
   // We load the node object that the current comment is attached to
@@ -277,7 +277,7 @@ function phptemplate_preprocess_comment(&$vars, $hook) {
  * @param $hook
  *   The name of the theme function being called ("block" in this case.)
  */
-function phptemplate_preprocess_block(&$vars, $hook) {
+function zen_preprocess_block(&$vars, $hook) {
   $block = $vars['block'];
 
   // Special classes for blocks
@@ -392,3 +392,43 @@ function path_to_zentheme() {
   }
   return $theme_path;
 }
+
+/**
+ * Implementation of HOOK_theme().
+ *
+ * The Zen base theme uses this function as a work-around for a bug in Drupal
+ * 6.0-6.2: #252430 (Allow BASETHEME_ prefix in preprocessor function names).
+ *
+ * Sub-themes Also use this function by calling it from their HOOK_theme() in
+ * order to get around a design limitation in Drupal 6: #249532 (Allow subthemes
+ * to have preprocess hooks without tpl files.)
+ *
+ * @param $existing
+ *   An array of existing implementations that may be used for override purposes.
+ * @param $type
+ *   What 'type' is being processed.
+ * @param $theme
+ *   The actual name of theme that is being being checked.
+ * @param $path
+ *   The directory path of the theme or module, so that it doesn't need to be looked up.
+ */
+function zen_theme(&$existing, $type, $theme, $path) {
+  // Inspect the preprocess functions for each of Zen's tpl files.
+  $default_hooks = array('page', 'node', 'comment', 'block');
+  foreach ($default_hooks AS $hook) {
+    // Each theme has two possible preprocess functions that can act on a hook.
+    $functions = array(
+      $theme . '_preprocess',
+      $theme . '_preprocess_' . $hook,
+    );
+    foreach ($functions AS $key => $function) {
+      // Add any functions that are not already in the registry.
+      if (function_exists($function) && !in_array($function, $existing[$hook]['preprocess functions'])) {
+        // We add the preprocess function to the end of the existing list.
+        $existing[$hook]['preprocess functions'][] = $function;
+      }
+    }
+  }
+  // Since we modify the $existing cache directly, return nothing.
+  return array();
+}
index 1c7efff..4cafcad 100644 (file)
@@ -47,6 +47,13 @@ if (theme_get_setting('zen_classic_fixed')) {
 
 
 /**
+ * Implementation of HOOK_theme().
+ */
+function zen_classic_theme(&$existing, $type, $theme, $path) {
+  return zen_theme($existing, $type, $theme, $path);
+}
+
+/**
  * Override or insert PHPTemplate variables into all templates.
  *
  * @param $vars
@@ -56,9 +63,6 @@ if (theme_get_setting('zen_classic_fixed')) {
  */
 /* -- Delete this line if you want to use this function
 function zen_classic_preprocess(&$vars, $hook) {
-  // First run Zen's preprocess function.
-  phptemplate_preprocess($vars);
-
   $vars['sample_variable'] = t('Lorem ipsum.');
 }
 // */
@@ -73,9 +77,6 @@ function zen_classic_preprocess(&$vars, $hook) {
  */
 /* -- Delete this line if you want to use this function
 function zen_classic_preprocess_page(&$vars, $hook) {
-  // First run Zen's preprocess function.
-  phptemplate_preprocess_page($vars);
-
   $vars['sample_variable'] = t('Lorem ipsum.');
 }
 // */
@@ -90,9 +91,6 @@ function zen_classic_preprocess_page(&$vars, $hook) {
  */
 /* -- Delete this line if you want to use this function
 function zen_classic_preprocess_node(&$vars, $hook) {
-  // First run Zen's preprocess function.
-  phptemplate_preprocess_node($vars);
-
   $vars['sample_variable'] = t('Lorem ipsum.');
 }
 // */
@@ -107,9 +105,6 @@ function zen_classic_preprocess_node(&$vars, $hook) {
  */
 /* -- Delete this line if you want to use this function
 function zen_classic_preprocess_comment(&$vars, $hook) {
-  // First run Zen's preprocess function.
-  phptemplate_preprocess_comment($vars);
-
   $vars['sample_variable'] = t('Lorem ipsum.');
 }
 // */
@@ -124,9 +119,6 @@ function zen_classic_preprocess_comment(&$vars, $hook) {
  */
 /* -- Delete this line if you want to use this function
 function zen_classic_preprocess_block(&$vars, $hook) {
-  // First run Zen's preprocess function.
-  phptemplate_preprocess_block($vars);
-
   $vars['sample_variable'] = t('Lorem ipsum.');
 }
 // */