Index: includes/theme.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/theme.inc,v retrieving revision 1.409 diff -u -p -r1.409 theme.inc --- includes/theme.inc 9 Jan 2008 22:01:29 -0000 1.409 +++ includes/theme.inc 9 Jan 2008 23:24:44 -0000 @@ -757,13 +757,14 @@ function drupal_find_theme_templates($ca // Escape the periods in the extension. $regex = str_replace('.', '\.', $extension) .'$'; - // Collect sub-themes for the current theme. This allows base themes to have - // sub-themes in its folder hierarchy without affecting the base theme. + // Collect a list of themes directories not owned by the current theme. + // This is to prevent the active base theme from reading sub-theme templates + // when they are placed in a sub-directory of the base theme. global $theme; - $sub_themes = array(); + $filter_list = array(); foreach (list_themes() as $theme_info) { - if (!empty($theme_info->base_theme) && $theme_info->base_theme == $theme) { - $sub_themes[] = dirname($theme_info->filename); + if ($theme_info->name != $theme) { + $filter_list[] = dirname($theme_info->filename); } } @@ -771,8 +772,8 @@ function drupal_find_theme_templates($ca // templates separately from checking for patterns. $files = drupal_system_listing($regex, $path, 'name', 0); foreach ($files as $template => $file) { - // Catch sub-themes and skip. - if (strpos($file->filename, str_replace($sub_themes, '', $file->filename)) !== 0) { + // Filter out templates in sub-directories not owned by the current theme. + if (strpos($file->filename, str_replace($filter_list, '', $file->filename)) !== 0) { continue; } // Chop off the remaining extensions if there are any. $template already @@ -791,7 +792,7 @@ function drupal_find_theme_templates($ca ); } } - +print var_dump($templates); $patterns = array_keys($files); foreach ($cache as $hook => $info) {