handler = isset($smarty->_cache[ 'resource_handlers' ][ $type ]) ? $smarty->_cache[ 'resource_handlers' ][ $type ] : Smarty_Resource::load($smarty, $type); $this->smarty = $smarty; $this->resource = $resource; $this->type = $type; $this->name = $name; } /** * initialize Source Object for given resource * Either [$_template] or [$smarty, $template_resource] must be specified * * @param Smarty_Internal_Template $_template template object * @param Smarty $smarty smarty object * @param string $template_resource resource identifier * * @return Smarty_Template_Source Source Object * @throws SmartyException */ public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null) { if ($_template) { $smarty = $_template->smarty; $template_resource = $_template->template_resource; } if (empty($template_resource)) { throw new SmartyException('Source: Missing name'); } // parse resource_name, load resource handler, identify unique resource name if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]([\s\S]*)$/', $template_resource, $match)) { $type = $match[ 1 ]; $name = $match[ 2 ]; } else { // no resource given, use default // or single character before the colon is not a resource type, but part of the filepath $type = $smarty->default_resource_type; $name = $template_resource; } // create new source object $source = new Smarty_Template_Source($smarty, $template_resource, $type, $name); $source->handler->populate($source, $_template); if (!$source->exists && isset($_template->smarty->default_template_handler_func)) { Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source); $source->handler->populate($source, $_template); } return $source; } /** * Get source time stamp * * @return int */ public function getTimeStamp() { if (!isset($this->timestamp)) { $this->handler->populateTimestamp($this); } return $this->timestamp; } /** * Get source content * * @return string */ public function getContent() { return isset($this->content) ? $this->content : $this->handler->getContent($this); } }