diff --git a/includes/theme.inc b/includes/theme.inc index ee73965..016215c 100644 --- a/includes/theme.inc +++ b/includes/theme.inc @@ -1151,6 +1151,13 @@ function theme($hook, $variables = array()) { } } + // Include a file if the theme function is held elsewhere. + if (!empty($info['includes'])) { + foreach ($info['includes'] as $include_file) { + include_once DRUPAL_ROOT . '/' . $include_file; + } + } + // Generate the output using either a function or a template. $output = ''; if (isset($info['function'])) { diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test index 519a7a9..c66ffa0 100644 --- a/modules/simpletest/tests/theme.test +++ b/modules/simpletest/tests/theme.test @@ -68,6 +68,21 @@ class ThemeTestCase extends DrupalWebTestCase { } /** + * Ensures theme suggestions located in include files are loaded. + */ + function testSuggestionsInclude() { + $this->drupalGet('theme-test/suggestion-include'); + $this->assertText('Original theme function for testing suggestions stored in include files.'); + module_enable(array('theme_suggestions_test')); + // Test with both an unprimed and primed theme registry. + drupal_theme_rebuild(); + for ($i = 0; $i < 2; $i++) { + $this->drupalGet('theme-test/suggestion-include'); + $this->assertText('Theme function loaded from include file.'); + } + } + + /** * Ensure page-front template suggestion is added when on front page. */ function testFrontPageThemeSuggestion() { diff --git a/modules/simpletest/tests/theme_suggestions_test.inc b/modules/simpletest/tests/theme_suggestions_test.inc new file mode 100644 index 0000000..0b87bf9 --- /dev/null +++ b/modules/simpletest/tests/theme_suggestions_test.inc @@ -0,0 +1,5 @@ + 'theme_suggestions_test.inc', + 'variables' => array(), + ); + return $items; +} + +/** + * Preprocesses variables for theme_theme_suggestions_test_include(). + */ +function theme_suggestions_test_preprocess_theme_test_suggestion_include(&$variables) { + $variables['theme_hook_suggestion'] = 'theme_suggestions_test_include'; +} diff --git a/modules/simpletest/tests/theme_test.module b/modules/simpletest/tests/theme_test.module index 61a12bb..504a987 100644 --- a/modules/simpletest/tests/theme_test.module +++ b/modules/simpletest/tests/theme_test.module @@ -17,6 +17,9 @@ function theme_test_theme($existing, $type, $theme, $path) { $items['theme_test_foo'] = array( 'variables' => array('foo' => NULL), ); + $items['theme_test_suggestion_include'] = array( + 'variables' => array(), + ); return $items; } @@ -53,6 +56,12 @@ function theme_test_menu() { 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); + $items['theme-test/suggestion-include'] = array( + 'title' => 'Suggestion include', + 'page callback' => '_theme_test_suggestion_include', + 'access callback' => TRUE, + 'type' => MENU_CALLBACK, + ); return $items; } @@ -132,3 +141,17 @@ function _theme_test_suggestion() { function theme_theme_test_foo($variables) { return $variables['foo']; } + +/** + * Page callback, calls a theme hook suggestion located in an include file. + */ +function _theme_test_suggestion_include() { + return array('#theme' => 'theme_test_suggestion_include'); +} + +/** + * Theme function for testing suggestions stored in include files. + */ +function theme_theme_test_suggestion_include($variables) { + return 'Original theme function for testing suggestions stored in include files.'; +}