4 * Smarty Resource Data Object
5 * Meta Data Container for Template Files
8 * @subpackage TemplateResources
12 class Smarty_Template_Source
22 * Template Resource (Smarty_Internal_Template::$template_resource)
26 public $resource = null;
47 public $filepath = null;
54 public $timestamp = null;
61 public $exists = false;
64 * Source File Base name
68 public $basename = null;
71 * The Components an extended template is made of
73 * @var \Smarty_Template_Source[]
75 public $components = null;
80 * @var \Smarty_Resource
82 public $handler = null;
89 public $smarty = null;
96 public $isConfig = false;
99 * Template source content eventually set by default handler
103 public $content = null;
106 * Name of the Class to compile this resource's contents with
110 public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler';
113 * Name of the Class to tokenize this resource's contents with
117 public $template_lexer_class = 'Smarty_Internal_Templatelexer';
120 * Name of the Class to parse this resource's contents with
124 public $template_parser_class = 'Smarty_Internal_Templateparser';
127 * create Source Object container
129 * @param Smarty_Resource $handler Resource Handler this source object communicates with
130 * @param Smarty $smarty Smarty instance this source object belongs to
131 * @param string $resource full template_resource
132 * @param string $type type of resource
133 * @param string $name resource name
136 public function __construct(Smarty $smarty, $resource, $type, $name)
139 isset($smarty->_cache[ 'resource_handlers' ][ $type ]) ? $smarty->_cache[ 'resource_handlers' ][ $type ] :
140 Smarty_Resource::load($smarty, $type);
141 $this->smarty = $smarty;
142 $this->resource = $resource;
148 * initialize Source Object for given resource
149 * Either [$_template] or [$smarty, $template_resource] must be specified
151 * @param Smarty_Internal_Template $_template template object
152 * @param Smarty $smarty smarty object
153 * @param string $template_resource resource identifier
155 * @return Smarty_Template_Source Source Object
156 * @throws SmartyException
158 public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null,
159 $template_resource = null)
162 $smarty = $_template->smarty;
163 $template_resource = $_template->template_resource;
165 if (empty($template_resource)) {
166 throw new SmartyException('Source: Missing name');
168 // parse resource_name, load resource handler, identify unique resource name
169 if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]([\s\S]*)$/', $template_resource, $match)) {
173 // no resource given, use default
174 // or single character before the colon is not a resource type, but part of the filepath
175 $type = $smarty->default_resource_type;
176 $name = $template_resource;
178 // create new source object
179 $source = new Smarty_Template_Source($smarty, $template_resource, $type, $name);
180 $source->handler->populate($source, $_template);
181 if (!$source->exists && isset($_template->smarty->default_template_handler_func)) {
182 Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
183 $source->handler->populate($source, $_template);
189 * Get source time stamp
193 public function getTimeStamp()
195 if (!isset($this->timestamp)) {
196 $this->handler->populateTimestamp($this);
198 return $this->timestamp;
206 public function getContent()
208 return isset($this->content) ? $this->content : $this->handler->getContent($this);