function _views_find_module_templates

Scans a directory of a module for template files.

Parameters

array $cache: The existing cache of theme hooks to test against.

string $path: The path to search.

See also

drupal_find_theme_templates()

1 call to _views_find_module_templates()
views_theme in ./views.module
Implements hook_theme().

File

./views.module, line 235

Code

function _views_find_module_templates($cache, $path) {
    $templates = array();
    $regex = '/\\.tpl\\.php$/';
    // Because drupal_system_listing works the way it does, we check for real
    // templates separately from checking for patterns.
    $files = drupal_system_listing($regex, $path, 'name', 0);
    foreach ($files as $template => $file) {
        // Chop off the remaining extensions if there are any. $template already
        // has the rightmost extension removed, but there might still be more,
        // such as with .tpl.php, which still has .tpl in $template at this point.
        if (($pos = strpos($template, '.')) !== FALSE) {
            $template = substr($template, 0, $pos);
        }
        // Transform - in filenames to _ to match function naming scheme
        // for the purposes of searching.
        $hook = strtr($template, '-', '_');
        if (isset($cache[$hook])) {
            $templates[$hook] = array(
                'template' => $template,
                'path' => dirname($file->filename),
                'includes' => isset($cache[$hook]['includes']) ? $cache[$hook]['includes'] : NULL,
            );
        }
        // Ensure that the pattern is maintained from base themes to its sub-themes.
        // Each sub-theme will have their templates scanned so the pattern must be
        // held for subsequent runs.
        if (isset($cache[$hook]['pattern'])) {
            $templates[$hook]['pattern'] = $cache[$hook]['pattern'];
        }
    }
    $patterns = array_keys($files);
    foreach ($cache as $hook => $info) {
        if (!empty($info['pattern'])) {
            // Transform _ in pattern to - to match file naming scheme
            // for the purposes of searching.
            $pattern = strtr($info['pattern'], '_', '-');
            $matches = preg_grep('/^' . $pattern . '/', $patterns);
            if ($matches) {
                foreach ($matches as $match) {
                    $file = substr($match, 0, strpos($match, '.'));
                    // Put the underscores back in for the hook name and register this
                    // pattern.
                    $templates[strtr($file, '-', '_')] = array(
                        'template' => $file,
                        'path' => dirname($files[$match]->uri),
                        'variables' => isset($info['variables']) ? $info['variables'] : NULL,
                        'render element' => isset($info['render element']) ? $info['render element'] : NULL,
                        'base hook' => $hook,
                        'includes' => isset($info['includes']) ? $info['includes'] : NULL,
                    );
                }
            }
        }
    }
    return $templates;
}