ThemeTestHooks.php

Namespace

Drupal\theme_test\Hook

File

core/modules/system/tests/modules/theme_test/src/Hook/ThemeTestHooks.php

View source
<?php

declare (strict_types=1);
namespace Drupal\theme_test\Hook;

use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Extension\Extension;
use Drupal\Core\Hook\Attribute\Hook;

/**
 * Hook implementations for theme_test.
 */
class ThemeTestHooks {
    
    /**
     * Implements hook_theme().
     */
    public function theme($existing, $type, $theme, $path) : array {
        $items['theme_test'] = [
            'file' => 'theme_test.inc',
            'variables' => [
                'foo' => '',
            ],
        ];
        $items['theme_test_template_test'] = [
            'template' => 'theme_test.template_test',
        ];
        $items['theme_test_template_test_2'] = [
            'template' => 'theme_test.template_test',
        ];
        $items['theme_test_suggestion_provided'] = [
            'variables' => [],
        ];
        $items['theme_test_specific_suggestions'] = [
            'variables' => [],
        ];
        $items['theme_test_suggestions'] = [
            'variables' => [],
        ];
        $items['theme_test_general_suggestions'] = [
            'variables' => [
                'module_hook' => 'theme_test_theme',
                'theme_hook' => 'none',
            ],
        ];
        $items['theme_test_foo'] = [
            'variables' => [
                'foo' => NULL,
            ],
        ];
        $items['theme_test_render_element'] = [
            'render element' => 'elements',
        ];
        $items['theme_test_render_element_children'] = [
            'render element' => 'element',
        ];
        $items['theme_test_preprocess_suggestions'] = [
            'variables' => [
                'foo' => '',
                'bar' => '',
            ],
        ];
        $items['theme_test_preprocess_callback'] = [
            'variables' => [
                'foo' => '',
            ],
        ];
        $items['theme_test_registered_by_module'] = [
            'render element' => 'content',
            'base hook' => 'container',
        ];
        $items['theme_test_theme_class'] = [
            'variables' => [
                'message' => '',
            ],
        ];
        $items['theme_test_deprecations_preprocess'] = [
            'variables' => [
                'foo' => '',
                'bar' => '',
                'gaz' => '',
                'set_var' => '',
                'for_var' => '',
                'contents' => [],
            ],
        ];
        $items['theme_test_deprecations_child'] = [
            'variables' => [
                'foo' => '',
                'bar' => '',
                'gaz' => '',
            ],
        ];
        $items['theme_test_deprecations_hook_theme'] = [
            'variables' => [
                'foo' => '',
                'bar' => '',
                'deprecations' => [
                    'foo' => "'foo' is deprecated in drupal:X.0.0 and is removed from drupal:Y.0.0. Use 'new_foo' instead. See https://www.example.com.",
                    'bar' => "'bar' is deprecated in drupal:X.0.0 and is removed from drupal:Y.0.0. Use 'new_bar' instead. See https://www.example.com.",
                ],
            ],
        ];
        return $items;
    }
    
    /**
     * Implements hook_theme_registry_alter().
     */
    public function themeRegistryAlter(&$registry) {
        $registry['theme_test_preprocess_callback']['preprocess functions'][] = [
            '\\Drupal\\theme_test\\ThemeTestPreprocess',
            'preprocess',
        ];
    }
    
    /**
     * Implements hook_page_bottom().
     */
    public function pageBottom(array &$page_bottom) {
        $page_bottom['theme_test_page_bottom'] = [
            '#markup' => 'theme test page bottom markup',
        ];
    }
    
    /**
     * Implements hook_theme_suggestions_alter().
     */
    public function themeSuggestionsAlter(array &$suggestions, array $variables, $hook) {
        \Drupal::messenger()->addStatus('theme_test_theme_suggestions_alter' . '() executed for ' . $hook . '.');
    }
    
    /**
     * Implements hook_theme_suggestions_HOOK_alter().
     */
    public function themeSuggestionsThemeTestSuggestionsAlter(array &$suggestions, array $variables) {
        \Drupal::messenger()->addStatus('theme_test_theme_suggestions_theme_test_suggestions_alter' . '() executed.');
    }
    
    /**
     * Implements hook_system_info_alter().
     *
     * @see \Drupal\system\Tests\Theme\ThemeInfoTest::testChanges()
     */
    public function systemInfoAlter(array &$info, Extension $file, $type) {
        if ($type == 'theme' && $file->getName() == 'test_theme' && \Drupal::state()->get('theme_test.modify_info_files')) {
            // Add a library to see if the system picks it up.
            $info += [
                'libraries' => [],
            ];
            $info['libraries'][] = 'core/once';
        }
    }
    
    /**
     * Implements hook_library_info_alter().
     */
    public function libraryInfoAlter(array &$libraries, string $extension) : void {
        // Allow test code to simulate library changes in a particular extension by
        // setting a state key in the form `theme_test_library_info_alter $extension`,
        // whose values is an array containing everything that should be recursively
        // merged into the given extension's library definitions.
        $info = \Drupal::state()->get('theme_test_library_info_alter' . " {$extension}");
        if (is_array($info)) {
            $libraries = NestedArray::mergeDeep($libraries, $info);
        }
    }

}

Classes

Title Deprecated Summary
ThemeTestHooks Hook implementations for theme_test.

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