Commit dc685b07 authored by catch's avatar catch
Browse files

Issue #1430300 by mradcliffe, effulgentsia: Fixed Preprocess functions in an...

Issue #1430300 by mradcliffe, effulgentsia: Fixed Preprocess functions in an include file fail to get called when the theme implements a suggestion override.
parent 8c806a8f
......@@ -1035,6 +1035,13 @@ function theme($hook, $variables = array()) {
if (isset($info['base hook'])) {
$base_hook = $info['base hook'];
$base_hook_info = $hooks[$base_hook];
// Include files required by the base hook, since its variable processors
// might reside there.
if (!empty($base_hook_info['includes'])) {
foreach ($base_hook_info['includes'] as $include_file) {
include_once DRUPAL_ROOT . '/' . $include_file;
}
}
if (isset($base_hook_info['preprocess functions']) || isset($base_hook_info['process functions'])) {
$variables['theme_hook_suggestion'] = $hook;
$hook = $base_hook;
......
......@@ -52,11 +52,19 @@ class ThemeUnitTest extends DrupalWebTestCase {
}
/**
* Preprocess functions for the base hook should run even for suggestion implementations.
*/
* Ensures preprocess functions run even for suggestion implementations.
*
* The theme hook used by this test has its base preprocess function in a
* separate file, so this test also ensures that that file is correctly loaded
* when needed.
*/
function testPreprocessForSuggestions() {
$this->drupalGet('theme-test/suggestion');
$this->assertText('test_theme_breadcrumb__suggestion: 1', t('Theme hook suggestion ran with data available from a preprocess function for the base hook.'));
// Test with both an unprimed and primed theme registry.
drupal_theme_rebuild();
for ($i = 0; $i < 2; $i++) {
$this->drupalGet('theme-test/suggestion');
$this->assertText('Theme hook implementor=test_theme_theme_test__suggestion(). Foo=template_preprocess_theme_test', 'Theme hook suggestion ran with data available from a preprocess function for the base hook.');
}
}
/**
......
<?php
/**
* Returns HTML for the 'theme_test' theme hook used by tests.
*/
function theme_theme_test($variables) {
return 'Theme hook implementor=theme_theme_test(). Foo=' . $variables['foo'];
}
/**
* Preprocesses variables for theme_theme_test().
*/
function template_preprocess_theme_test(&$variables) {
$variables['foo'] = 'template_preprocess_theme_test';
}
......@@ -4,13 +4,16 @@
* Implements hook_theme().
*/
function theme_test_theme($existing, $type, $theme, $path) {
$items['theme_test'] = array(
'file' => 'theme_test.inc',
'variables' => array('foo' => ''),
);
$items['theme_test_template_test'] = array(
'template' => 'theme_test.template_test',
);
$items['theme_test_template_test_2'] = array(
'template' => 'theme_test.template_test',
);
return $items;
}
......@@ -129,16 +132,7 @@ function _theme_test_alter() {
* Page callback, calls a theme hook suggestion.
*/
function _theme_test_suggestion() {
return theme(array('breadcrumb__suggestion', 'breadcrumb'), array());
}
/**
* Implements hook_preprocess_breadcrumb().
*
* Set a variable that can later be tested to see if this function ran.
*/
function theme_test_preprocess_breadcrumb(&$variables) {
$variables['theme_test_preprocess_breadcrumb'] = 1;
return theme(array('theme_test__suggestion', 'theme_test'), array());
}
/**
......
......@@ -3,10 +3,8 @@
/**
* Tests a theme overriding a suggestion of a base theme hook.
*/
function test_theme_breadcrumb__suggestion($variables) {
// Tests that preprocess functions for the base theme hook get called even
// when the suggestion has an implementation.
return 'test_theme_breadcrumb__suggestion: ' . $variables['theme_test_preprocess_breadcrumb'];
function test_theme_theme_test__suggestion($variables) {
return 'Theme hook implementor=test_theme_theme_test__suggestion(). Foo=' . $variables['foo'];
}
/**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment