mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-03 22:01:36 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			114 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Smarty Internal Plugin Resource Extends
 | 
						|
 *
 | 
						|
 * @package    Smarty
 | 
						|
 * @subpackage TemplateResources
 | 
						|
 * @author     Uwe Tews
 | 
						|
 * @author     Rodney Rehm
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Smarty Internal Plugin Resource Extends
 | 
						|
 * Implements the file system as resource for Smarty which {extend}s a chain of template files templates
 | 
						|
 *
 | 
						|
 * @package    Smarty
 | 
						|
 * @subpackage TemplateResources
 | 
						|
 */
 | 
						|
class Smarty_Internal_Resource_Extends extends Smarty_Resource
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * mbstring.overload flag
 | 
						|
     *
 | 
						|
     * @var int
 | 
						|
     */
 | 
						|
    public $mbstring_overload = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
     * populate Source Object with meta data from Resource
 | 
						|
     *
 | 
						|
     * @param Smarty_Template_Source   $source    source object
 | 
						|
     * @param Smarty_Internal_Template $_template template object
 | 
						|
     *
 | 
						|
     * @throws SmartyException
 | 
						|
     */
 | 
						|
    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
 | 
						|
    {
 | 
						|
        $uid = sha1(getcwd());
 | 
						|
        $sources = array();
 | 
						|
        $components = explode('|', $source->name);
 | 
						|
        $exists = true;
 | 
						|
        foreach ($components as $component) {
 | 
						|
            /* @var \Smarty_Template_Source $_s */
 | 
						|
            $_s = Smarty_Template_Source::load(null, $source->smarty, $component);
 | 
						|
            if ($_s->type == 'php') {
 | 
						|
                throw new SmartyException("Resource type {$_s->type} cannot be used with the extends resource type");
 | 
						|
            }
 | 
						|
            $sources[$_s->uid] = $_s;
 | 
						|
            $uid .= $source->smarty->_realpath($_s->filepath, true);
 | 
						|
            if ($_template) {
 | 
						|
                $exists = $exists && $_s->exists;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        $source->components = $sources;
 | 
						|
        $source->filepath = $_s->filepath;
 | 
						|
        $source->uid = sha1($uid);
 | 
						|
        $source->exists = $exists;
 | 
						|
        if ($_template) {
 | 
						|
            $source->timestamp = $_s->timestamp;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * populate Source Object with timestamp and exists from Resource
 | 
						|
     *
 | 
						|
     * @param Smarty_Template_Source $source source object
 | 
						|
     */
 | 
						|
    public function populateTimestamp(Smarty_Template_Source $source)
 | 
						|
    {
 | 
						|
        $source->exists = true;
 | 
						|
        /* @var \Smarty_Template_Source $_s */
 | 
						|
        foreach ($source->components as $_s) {
 | 
						|
            $source->exists = $source->exists && $_s->exists;
 | 
						|
        }
 | 
						|
        $source->timestamp = $source->exists ? $_s->getTimeStamp() : false;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Load template's source from files into current template object
 | 
						|
     *
 | 
						|
     * @param Smarty_Template_Source $source source object
 | 
						|
     *
 | 
						|
     * @return string template source
 | 
						|
     * @throws SmartyException if source cannot be loaded
 | 
						|
     */
 | 
						|
    public function getContent(Smarty_Template_Source $source)
 | 
						|
    {
 | 
						|
        if (!$source->exists) {
 | 
						|
            throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
 | 
						|
        }
 | 
						|
 | 
						|
        $_components = array_reverse($source->components);
 | 
						|
 | 
						|
        $_content = '';
 | 
						|
        /* @var \Smarty_Template_Source $_s */
 | 
						|
        foreach ($_components as $_s) {
 | 
						|
            // read content
 | 
						|
            $_content .= $_s->getContent();
 | 
						|
        }
 | 
						|
        return $_content;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Determine basename for compiled filename
 | 
						|
     *
 | 
						|
     * @param Smarty_Template_Source $source source object
 | 
						|
     *
 | 
						|
     * @return string resource's basename
 | 
						|
     */
 | 
						|
    public function getBasename(Smarty_Template_Source $source)
 | 
						|
    {
 | 
						|
        return str_replace(':', '.', basename($source->filepath));
 | 
						|
    }
 | 
						|
}
 |