function views_theme

Implements hook_theme().

Register views theming functions.

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

File

./views.module, line 88

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 $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;
}