diff --git a/core/modules/node/node.module b/core/modules/node/node.module index e252d7e..01068e3 100644 --- a/core/modules/node/node.module +++ b/core/modules/node/node.module @@ -552,23 +552,6 @@ function node_preprocess_block(&$variables) { } /** - * Implements hook_theme_suggestions_HOOK(). - */ -function node_theme_suggestions_node(array $variables) { - $suggestions = array(); - $node = $variables['elements']['#node']; - $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_'); - - $suggestions[] = 'node__' . $sanitized_view_mode; - $suggestions[] = 'node__' . $node->bundle(); - $suggestions[] = 'node__' . $node->bundle() . '__' . $sanitized_view_mode; - $suggestions[] = 'node__' . $node->id(); - $suggestions[] = 'node__' . $node->id() . '__' . $sanitized_view_mode; - - return $suggestions; -} - -/** * Prepares variables for node templates. * * Default template: node.html.twig. diff --git a/core/modules/node/src/Tests/NodeTemplateSuggestionsTest.php b/core/modules/node/src/Tests/NodeTemplateSuggestionsTest.php index fef6aa0..9af0624 100644 --- a/core/modules/node/src/Tests/NodeTemplateSuggestionsTest.php +++ b/core/modules/node/src/Tests/NodeTemplateSuggestionsTest.php @@ -26,16 +26,19 @@ function testNodeThemeHookSuggestions() { $build = \Drupal::entityManager()->getViewBuilder('node')->view($node, $view_mode); $variables['elements'] = $build; - $suggestions = \Drupal::moduleHandler()->invokeAll('theme_suggestions_node', array($variables)); + $suggestions = array(); + $hook = 'node'; + \Drupal::moduleHandler()->alter('theme_suggestions', $suggestions, $variables, $hook); $this->assertEqual($suggestions, array('node__full', 'node__page', 'node__page__full', 'node__' . $node->id(), 'node__' . $node->id() . '__full'), 'Found expected node suggestions.'); // Change the view mode. $view_mode = 'node.my_custom_view_mode'; $build = \Drupal::entityManager()->getViewBuilder('node')->view($node, $view_mode); - $variables['elements'] = $build; - $suggestions = \Drupal::moduleHandler()->invokeAll('theme_suggestions_node', array($variables)); + + $suggestions = array(); + \Drupal::moduleHandler()->alter('theme_suggestions', $suggestions, $variables, $hook); $this->assertEqual($suggestions, array('node__node_my_custom_view_mode', 'node__page', 'node__page__node_my_custom_view_mode', 'node__' . $node->id(), 'node__' . $node->id() . '__node_my_custom_view_mode'), 'Found expected node suggestions.'); } diff --git a/core/modules/system/system.module b/core/modules/system/system.module index f3b65a2..0e7679c 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -343,6 +343,24 @@ function system_theme_suggestions_field(array $variables) { return $suggestions; } + +/** + * Implements hook_theme_suggestions_alter(). + */ +function system_theme_suggestions_alter(array &$suggestions, array $variables, $hook) { + $entity_definition = Drupal::entityManager()->getDefinition($hook, FALSE); + if ($entity_definition && $entity_definition->hasViewBuilderClass() && isset($variables['elements']['#view_mode'])) { + $entity = $variables['elements']["#$hook"]; + $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_'); + + $suggestions[] = $entity->getEntityTypeId() . '__' . $sanitized_view_mode; + $suggestions[] = $entity->getEntityTypeId() . '__' . $entity->bundle(); + $suggestions[] = $entity->getEntityTypeId() . '__' . $entity->bundle() . '__' . $sanitized_view_mode; + $suggestions[] = $entity->getEntityTypeId() . '__' . $entity->id(); + $suggestions[] = $entity->getEntityTypeId() . '__' . $entity->id() . '__' . $sanitized_view_mode; + } +} + /** * Implements hook_stream_wrappers(). */