Вход Регистрация
Файл: contao-3.5.8/system/modules/core/library/Contao/TemplateLoader.php
Строк: 80
<?php

/**
 * Contao Open Source CMS
 *
 * Copyright (c) 2005-2016 Leo Feyer
 *
 * @license LGPL-3.0+
 */

namespace Contao;


/**
 * Automatically loads template files based on a mapper array
 *
 * The class stores template names and automatically loads the files upon their
 * first usage. It uses a mapper array to support complex nesting and arbitrary
 * subfolders to store the template files in.
 *
 * Usage:
 *
 *     ClassLoader::addFile('moo_mediabox', 'core/templates');
 *
 * @author Leo Feyer <https://github.com/leofeyer>
 */
class TemplateLoader
{

    
/**
     * Known files
     * @var array
     */
    
protected static $files = array();


    
/**
     * Add a new template with its file path
     *
     * @param string $name The template name
     * @param string $file The path to the template folder
     */
    
public static function addFile($name$file)
    {
        
self::$files[$name] = $file;
    }


    
/**
     * Add multiple new templates with their file paths
     *
     * @param array $files An array of files
     */
    
public static function addFiles($files)
    {
        foreach (
$files as $name=>$file)
        {
            
self::addFile($name$file);
        }
    }


    
/**
     * Return the template files as array
     *
     * @return array An array of files
     */
    
public static function getFiles()
    {
        return 
self::$files;
    }


    
/**
     * Return the files matching a prefix as array
     *
     * @param string $prefix The prefix (e.g. "moo_")
     *
     * @return array An array of matching files
     */
    
public static function getPrefixedFiles($prefix)
    {
        return 
array_values(preg_grep('/^' $prefix '/'array_keys(self::$files)));
    }


    
/**
     * Return a template path
     *
     * @param string $template The template name
     * @param string $format   The output format (e.g. "html5")
     * @param string $custom   The custom templates folder (defaults to "templates")
     *
     * @return string The path to the template file
     *
     * @throws Exception If $template does not exist
     */
    
public static function getPath($template$format$custom='templates')
    {
        
$file $template .  '.' $format;

        
// Check the theme folder first
        
if (file_exists(TL_ROOT '/' $custom '/' $file))
        {
            return 
TL_ROOT '/' $custom '/' $file;
        }

        
// Then check the global templates directory (see #5547)
        
if ($custom != 'templates')
        {
            if (
file_exists(TL_ROOT '/templates/' $file))
            {
                return 
TL_ROOT '/templates/' $file;
            }
        }

        
// Load the default template
        
if (isset(self::$files[$template]))
        {
            return 
TL_ROOT '/' self::$files[$template] . '/' $file;
        }

        throw new 
Exception('Could not find template "' $template '"');
    }


    
/**
     * Return the path to the default template
     *
     * @param string $template The template name
     * @param string $format   The output format (e.g. "html5")
     *
     * @return string The path to the default template file
     *
     * @throws Exception If $template does not exist
     */
    
public static function getDefaultPath($template$format)
    {
        
$file $template .  '.' $format;

        if (isset(
self::$files[$template]))
        {
            return 
TL_ROOT '/' self::$files[$template] . '/' $file;
        }

        throw new 
Exception('Could not find template "' $template '"');
    }
}
Онлайн: 0
Реклама