drupal_find_theme_functions($cache, $prefixes)
Allows themes and/or theme engines to discover overridden theme functions.
Parameters
array $cache: The existing cache of theme hooks to test against.
array $prefixes: An array of prefixes to test, in reverse order of importance.
Return value
array The functions found, suitable for returning from hook_theme;
File
- core/includes/theme.inc, line 135
- The theme system, which controls the output of Drupal.
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | function drupal_find_theme_functions( $cache , $prefixes ) { $implementations = []; $grouped_functions = \Drupal::service( 'theme.registry' )->getPrefixGroupedUserFunctions(); foreach ( $cache as $hook => $info ) { foreach ( $prefixes as $prefix ) { // Find theme functions that implement possible "suggestion" variants of // registered theme hooks and add those as new registered theme hooks. // The 'pattern' key defines a common prefix that all suggestions must // start with. The default is the name of the hook followed by '__'. An // 'base hook' key is added to each entry made for a found suggestion, // so that common functionality can be implemented for all suggestions of // the same base hook. To keep things simple, deep hierarchy of // suggestions is not supported: each suggestion's 'base hook' key // refers to a base hook, not to another suggestion, and all suggestions // are found using the base hook's pattern, not a pattern from an // intermediary suggestion. $pattern = isset( $info [ 'pattern' ]) ? $info [ 'pattern' ] : ( $hook . '__' ); // Grep only the functions which are within the prefix group. list( $first_prefix , ) = explode ( '_' , $prefix , 2); if (!isset( $info [ 'base hook' ]) && ! empty ( $pattern ) && isset( $grouped_functions [ $first_prefix ])) { $matches = preg_grep( '/^' . $prefix . '_' . $pattern . '/' , $grouped_functions [ $first_prefix ]); if ( $matches ) { foreach ( $matches as $match ) { $new_hook = substr ( $match , strlen ( $prefix ) + 1); $arg_name = isset( $info [ 'variables' ]) ? 'variables' : 'render element' ; $implementations [ $new_hook ] = array ( 'function' => $match , $arg_name => $info [ $arg_name ], 'base hook' => $hook , ); } } } // Find theme functions that implement registered theme hooks and include // that in what is returned so that the registry knows that the theme has // this implementation. if (function_exists( $prefix . '_' . $hook )) { $implementations [ $hook ] = array ( 'function' => $prefix . '_' . $hook , ); } } } return $implementations ; } |
Please login to continue.