3 * Smarty Internal Plugin Resource Extends
6 * @subpackage TemplateResources
12 * Smarty Internal Plugin Resource Extends
13 * Implements the file system as resource for Smarty which {extend}s a chain of template files templates
16 * @subpackage TemplateResources
18 class Smarty_Internal_Resource_Extends extends Smarty_Resource
21 * mbstring.overload flag
25 public $mbstring_overload = 0;
28 * populate Source Object with meta data from Resource
30 * @param Smarty_Template_Source $source source object
31 * @param Smarty_Internal_Template $_template template object
33 * @throws SmartyException
35 public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
39 $components = explode('|', $source->name);
40 $smarty = &$source->smarty;
42 foreach ($components as $component) {
43 /* @var \Smarty_Template_Source $_s */
44 $_s = Smarty_Template_Source::load(null, $smarty, $component);
45 if ($_s->type == 'php') {
46 throw new SmartyException("Resource type {$_s->type} cannot be used with the extends resource type");
48 $sources[ $_s->uid ] = $_s;
49 $uid .= $_s->filepath;
51 $exists = $exists && $_s->exists;
54 $source->components = $sources;
55 $source->filepath = $_s->filepath;
56 $source->uid = sha1($uid . $source->smarty->_joined_template_dir);
57 $source->exists = $exists;
59 $source->timestamp = $_s->timestamp;
64 * populate Source Object with timestamp and exists from Resource
66 * @param Smarty_Template_Source $source source object
68 public function populateTimestamp(Smarty_Template_Source $source)
70 $source->exists = true;
71 /* @var \Smarty_Template_Source $_s */
72 foreach ($source->components as $_s) {
73 $source->exists = $source->exists && $_s->exists;
75 $source->timestamp = $source->exists ? $_s->getTimeStamp() : false;
79 * Load template's source from files into current template object
81 * @param Smarty_Template_Source $source source object
83 * @return string template source
84 * @throws SmartyException if source cannot be loaded
86 public function getContent(Smarty_Template_Source $source)
88 if (!$source->exists) {
89 throw new SmartyException("Unable to load template '{$source->type}:{$source->name}'");
92 $_components = array_reverse($source->components);
95 /* @var \Smarty_Template_Source $_s */
96 foreach ($_components as $_s) {
98 $_content .= $_s->getContent();
104 * Determine basename for compiled filename
106 * @param Smarty_Template_Source $source source object
108 * @return string resource's basename
110 public function getBasename(Smarty_Template_Source $source)
112 return str_replace(':', '.', basename($source->filepath));
116 * Disable timestamp checks for extends resource.
117 * The individual source components will be checked.
121 public function checkTimestamps()