views_theme($existing, $type, $theme, $path)
Implements hook_theme().
Register views theming functions and those that are defined via views plugin definitions.
File
- core/modules/views/views.module, line 84
- Primarily Drupal hooks and global API functions to manipulate views.
Code
function views_theme($existing, $type, $theme, $path) { \Drupal::moduleHandler()->loadInclude('views', 'inc', 'views.theme'); // Some quasi clever array merging here. $base = array( 'file' => 'views.theme.inc', ); // Our extra version of pager from pager.inc $hooks['views_mini_pager'] = $base + array( 'variables' => array('tags' => array(), 'quantity' => 9, 'element' => 0, 'parameters' => array()), ); $variables = array( // For displays, we pass in a dummy array as the first parameter, since // $view is an object but the core contextual_preprocess() function only // attaches contextual links when the primary theme argument is an array. 'display' => array( 'view_array' => array(), 'view' => NULL, 'rows' => array(), 'header' => array(), 'footer' => array(), 'empty' => array(), 'exposed' => array(), 'more' => array(), 'feed_icons' => array(), 'pager' => array(), 'title' => '', 'attachment_before' => array(), 'attachment_after' => array(), ), 'style' => array('view' => NULL, 'options' => NULL, 'rows' => NULL, 'title' => NULL), 'row' => array('view' => NULL, 'options' => NULL, 'row' => NULL, 'field_alias' => NULL), 'exposed_form' => array('view' => NULL, 'options' => NULL), 'pager' => array( 'view' => NULL, 'options' => NULL, 'tags' => array(), 'quantity' => 9, 'element' => 0, 'parameters' => array() ), ); // Default view themes $hooks['views_view_field'] = $base + array( 'variables' => array('view' => NULL, 'field' => NULL, 'row' => NULL), ); $hooks['views_view_grouping'] = $base + array( 'variables' => array('view' => NULL, 'grouping' => NULL, 'grouping_level' => NULL, 'rows' => NULL, 'title' => NULL), ); // Only display, pager, row, and style plugins can provide theme hooks. $plugin_types = [ 'display', 'pager', 'row', 'style', 'exposed_form', ]; $plugins = array(); foreach ($plugin_types as $plugin_type) { $plugins[$plugin_type] = Views::pluginManager($plugin_type)->getDefinitions(); } $module_handler = \Drupal::moduleHandler(); // Register theme functions for all style plugins. It provides a basic auto // implementation of theme functions or template files by using the plugin // definitions (theme, theme_file, module, register_theme). Template files are // assumed to be located in the templates folder. foreach ($plugins as $type => $info) { foreach ($info as $def) { // Not all plugins have theme functions, and they can also explicitly // prevent a theme function from being registered automatically. if (!isset($def['theme']) || empty($def['register_theme'])) { continue; } // For each theme registration, we have a base directory to check for the // templates folder. This will be relative to the root of the given module // folder, so we always need a module definition. // @todo: watchdog or exception? if (!isset($def['provider']) || !$module_handler->moduleExists($def['provider'])) { continue; } $hooks[$def['theme']] = array( 'variables' => $variables[$type], ); // We always use the module directory as base dir. $module_dir = drupal_get_path('module', $def['provider']); $hooks[$def['theme']]['path'] = $module_dir; // For the views module we ensure views.theme.inc is included. if ($def['provider'] == 'views') { if (!isset($hooks[$def['theme']]['includes'])) { $hooks[$def['theme']]['includes'] = array(); } if (!in_array('views.theme.inc', $hooks[$def['theme']]['includes'])) { $hooks[$def['theme']]['includes'][] = $module_dir . '/views.theme.inc'; } } // The theme_file definition is always relative to the modules directory. elseif (!empty($def['theme_file'])) { $hooks[$def['theme']]['file'] = $def['theme_file']; } // Whenever we have a theme file, we include it directly so we can // auto-detect the theme function. if (isset($def['theme_file'])) { $include = \Drupal::root() . '/' . $module_dir . '/' . $def['theme_file']; if (is_file($include)) { require_once $include; } } // If there is no theme function for the given theme definition, it must // be a template file. By default this file is located in the /templates // directory of the module's folder. If a module wants to define its own // location it has to set register_theme of the plugin to FALSE and // implement hook_theme() by itself. if (!function_exists('theme_' . $def['theme'])) { $hooks[$def['theme']]['path'] .= '/templates'; $hooks[$def['theme']]['template'] = Html::cleanCssIdentifier($def['theme']); } else { $hooks[$def['theme']]['function'] = 'theme_' . $def['theme']; } } } $hooks['views_form_views_form'] = $base + array( 'render element' => 'form', ); $hooks['views_exposed_form'] = $base + array( 'render element' => 'form', ); return $hooks; }
Please login to continue.