Issue #1021270 by larowlan, wojtha: Fixed Blocks for custom menus are impossible to theme.

merge-requests/26/head
webchick 2011-05-24 14:00:57 -07:00
parent fef11ae71e
commit c09a969d96
2 changed files with 51 additions and 1 deletions

View File

@ -943,7 +943,15 @@ function template_preprocess_block(&$variables) {
$variables['theme_hook_suggestions'][] = 'block__' . $variables['block']->region;
$variables['theme_hook_suggestions'][] = 'block__' . $variables['block']->module;
$variables['theme_hook_suggestions'][] = 'block__' . $variables['block']->module . '__' . $variables['block']->delta;
// Hyphens (-) and underscores (_) play a special role in theme suggestions.
// Theme suggestions should only contain underscores, because within
// drupal_find_theme_templates(), underscores are converted to hyphens to
// match template file names, and then converted back to underscores to match
// pre-processing and other function names. So if your theme suggestion
// contains a hyphen, it will end up as an underscore after this conversion,
// and your function names won't be recognized. So, we need to convert
// hyphens to underscores in block deltas for the theme suggestions.
$variables['theme_hook_suggestions'][] = 'block__' . $variables['block']->module . '__' . strtr($variables['block']->delta, '-', '_');
// Create a valid HTML ID and make sure it is unique.
$variables['block_html_id'] = drupal_html_id('block-' . $variables['block']->module . '-' . $variables['block']->delta);

View File

@ -666,3 +666,45 @@ class BlockHTMLIdTestCase extends DrupalWebTestCase {
$this->assertRaw('block-block-test-test-html-id', t('HTML id for test block is valid.'));
}
}
/**
* Unit tests for template_preprocess_block().
*/
class BlockTemplateSuggestionsUnitTest extends DrupalUnitTestCase {
public static function getInfo() {
return array(
'name' => 'Block template suggestions',
'description' => 'Test the template_preprocess_block() function.',
'group' => 'Block',
);
}
/**
* Test if template_preprocess_block() handles the suggestions right.
*/
function testBlockThemeHookSuggestions() {
// Define block delta with underscore to be preprocessed
$block1 = new stdClass();
$block1->module = 'block';
$block1->delta = 'underscore_test';
$block1->region = 'footer';
$variables1 = array();
$variables1['elements']['#block'] = $block1;
$variables1['elements']['#children'] = '';
template_preprocess_block($variables1);
$this->assertEqual($variables1['theme_hook_suggestions'], array('block__footer', 'block__block', 'block__block__underscore_test'), t('Found expected block suggestions for delta with underscore'));
// Define block delta with hyphens to be preprocessed. Hyphens should be
// replaced with underscores.
$block2 = new stdClass();
$block2->module = 'block';
$block2->delta = 'hyphen-test';
$block2->region = 'footer';
$variables2 = array();
$variables2['elements']['#block'] = $block2;
$variables2['elements']['#children'] = '';
template_preprocess_block($variables2);
$this->assertEqual($variables2['theme_hook_suggestions'], array('block__footer', 'block__block', 'block__block__hyphen_test'), t('Hyphens (-) in block delta were replaced by underscore (_)'));
}
}