function ThemeManager::buildThemeHookSuggestions

Same name and namespace in other branches
  1. 10 core/lib/Drupal/Core/Theme/ThemeManager.php \Drupal\Core\Theme\ThemeManager::buildThemeHookSuggestions()

Builds theme hook suggestions for a theme hook with variables.

@internal This method may change at any time. It is not for use outside this class.

Parameters

string $hook: Theme hook that was called.

string $info_base_hook: Theme registry info for $hook['base hook'] key or empty string.

array $variables: Theme variables that were passed along with the call.

Return value

string[] Suggested theme hook names to use instead of $hook, in the order of ascending specificity. The caller will pick the last of those suggestions that has a known theme registry entry.

1 call to ThemeManager::buildThemeHookSuggestions()
ThemeManager::render in core/lib/Drupal/Core/Theme/ThemeManager.php
Generates themed output.

File

core/lib/Drupal/Core/Theme/ThemeManager.php, line 371

Class

ThemeManager
Provides the default implementation of a theme manager.

Namespace

Drupal\Core\Theme

Code

protected function buildThemeHookSuggestions(string $hook, string $info_base_hook, array &$variables) : array {
    // Set base hook for later use. For example if '#theme' => 'node__article'
    // is called, we run hook_theme_suggestions_node_alter() rather than
    // hook_theme_suggestions_node__article_alter(), and also pass in the base
    // hook as the last parameter to the suggestions alter hooks.
    $base_theme_hook = $info_base_hook ?: $hook;
    // Invoke hook_theme_suggestions_HOOK().
    $suggestions = $this->moduleHandler
        ->invokeAll('theme_suggestions_' . $base_theme_hook, [
        $variables,
    ]);
    // If the theme implementation was invoked with a direct theme suggestion
    // like '#theme' => 'node__article', add it to the suggestions array before
    // invoking suggestion alter hooks.
    if ($info_base_hook) {
        $suggestions[] = $hook;
    }
    // Invoke hook_theme_suggestions_alter() and
    // hook_theme_suggestions_HOOK_alter().
    $hooks = [
        'theme_suggestions',
        'theme_suggestions_' . $base_theme_hook,
    ];
    $this->moduleHandler
        ->alter($hooks, $suggestions, $variables, $base_theme_hook);
    $this->alter($hooks, $suggestions, $variables, $base_theme_hook);
    return $suggestions;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.