You are here

function views_theme in Views (for Drupal 7) 7.3

Same name and namespace in other branches
  1. 8.3 views.module \views_theme()
  2. 5 views.module \views_theme()
  3. 6.3 views.module \views_theme()
  4. 6.2 views.module \views_theme()

Implements hook_theme().

Register views theming functions.

1 call to views_theme()
ViewsModuleTest::testModuleTemplates in tests/views_module.test
Tests the dynamic includes of templates via module feature.

File

./views.module, line 88
Primarily Drupal hooks and global API functions to manipulate views.

Code

function views_theme($existing, $type, $theme, $path) {
  $path = drupal_get_path('module', 'views');
  ctools_include('theme', 'views', 'theme');

  // Some quasi clever array merging here.
  $base = array(
    'file' => 'theme.inc',
    'path' => $path . '/theme',
  );

  // Our extra version of pager from pager.inc.
  $hooks['views_mini_pager'] = $base + array(
    'variables' => array(
      'tags' => array(),
      'element' => 0,
      'parameters' => array(),
    ),
    'pattern' => 'views_mini_pager__',
  );
  $variables = array(
    // For displays, we pass in a sample 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,
    ),
    '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' => 10,
      'element' => 0,
      'parameters' => array(),
    ),
  );

  // Default view themes.
  $hooks['views_view_field'] = $base + array(
    'pattern' => 'views_view_field__',
    'variables' => array(
      'view' => NULL,
      'field' => NULL,
      'row' => NULL,
    ),
  );
  $hooks['views_view_grouping'] = $base + array(
    'pattern' => 'views_view_grouping__',
    'variables' => array(
      'view' => NULL,
      'grouping' => NULL,
      'grouping_level' => NULL,
      'rows' => NULL,
      'title' => NULL,
    ),
  );
  $plugins = views_fetch_plugin_data();

  // Register theme functions for all style plugins.
  foreach ($plugins as $type => $info) {
    foreach ($info as $plugin => $def) {
      if (isset($def['theme']) && (!isset($def['register theme']) || !empty($def['register theme']))) {
        $hooks[$def['theme']] = array(
          'pattern' => $def['theme'] . '__',
          'file' => $def['theme file'],
          'path' => $def['theme path'],
          'variables' => $variables[$type],
        );
        $include = DRUPAL_ROOT . '/' . $def['theme path'] . '/' . $def['theme file'];
        if (file_exists($include)) {
          require_once $include;
        }
        if (!function_exists('theme_' . $def['theme'])) {
          $hooks[$def['theme']]['template'] = drupal_clean_css_identifier($def['theme']);
        }
      }
      if (isset($def['additional themes'])) {
        foreach ($def['additional themes'] as $theme => $theme_type) {
          if (empty($theme_type)) {
            $theme = $theme_type;
            $theme_type = $type;
          }
          $hooks[$theme] = array(
            'pattern' => $theme . '__',
            'file' => $def['theme file'],
            'path' => $def['theme path'],
            'variables' => $variables[$theme_type],
          );
          if (!function_exists('theme_' . $theme)) {
            $hooks[$theme]['template'] = drupal_clean_css_identifier($theme);
          }
        }
      }
    }
  }
  $hooks['views_form_views_form'] = $base + array(
    'render element' => 'form',
  );
  $hooks['views_exposed_form'] = $base + array(
    'template' => 'views-exposed-form',
    'pattern' => 'views_exposed_form__',
    'render element' => 'form',
  );
  $hooks['views_more'] = $base + array(
    'template' => 'views-more',
    'pattern' => 'views_more__',
    'variables' => array(
      'more_url' => NULL,
      'link_text' => 'more',
      'view' => NULL,
    ),
  );

  // Add theme suggestions which are part of modules.
  foreach (views_get_module_apis() as $info) {
    if (isset($info['template path'])) {
      $hooks += _views_find_module_templates($hooks, $info['template path']);
    }
  }
  return $hooks;
}