summaryrefslogtreecommitdiff
path: root/lib/smarty3/sysplugins/smarty_internal_compile_extends.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/smarty3/sysplugins/smarty_internal_compile_extends.php')
-rw-r--r--lib/smarty3/sysplugins/smarty_internal_compile_extends.php64
1 files changed, 44 insertions, 20 deletions
diff --git a/lib/smarty3/sysplugins/smarty_internal_compile_extends.php b/lib/smarty3/sysplugins/smarty_internal_compile_extends.php
index 949875c..d72d2b7 100644
--- a/lib/smarty3/sysplugins/smarty_internal_compile_extends.php
+++ b/lib/smarty3/sysplugins/smarty_internal_compile_extends.php
@@ -1,5 +1,4 @@
<?php
-
/**
* Smarty Internal Plugin Compile extend
* Compiles the {extends} tag
@@ -64,18 +63,18 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh
// add code to initialize inheritance
$this->registerInit($compiler, true);
$file = trim($_attr[ 'file' ], '\'"');
- if (strlen($file) > 8 && substr($file, 0, 8) == 'extends:') {
+ if (strlen($file) > 8 && substr($file, 0, 8) === 'extends:') {
// generate code for each template
$files = array_reverse(explode('|', substr($file, 8)));
$i = 0;
foreach ($files as $file) {
- if ($file[ 0 ] == '"') {
+ if ($file[ 0 ] === '"') {
$file = trim($file, '".');
} else {
$file = "'{$file}'";
}
- $i ++;
- if ($i == count($files) && isset($_attr[ 'extends_resource' ])) {
+ $i++;
+ if ($i === count($files) && isset($_attr[ 'extends_resource' ])) {
$this->compileEndChild($compiler);
}
$this->compileInclude($compiler, $file);
@@ -84,8 +83,7 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh
$this->compileEndChild($compiler);
}
} else {
- $this->compileEndChild($compiler);
- $this->compileInclude($compiler, $_attr[ 'file' ]);
+ $this->compileEndChild($compiler, $_attr[ 'file' ]);
}
$compiler->has_code = false;
return '';
@@ -95,40 +93,66 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh
* Add code for inheritance endChild() method to end of template
*
* @param \Smarty_Internal_TemplateCompilerBase $compiler
+ * @param null|string $template optional inheritance parent template
+ *
+ * @throws \SmartyCompilerException
+ * @throws \SmartyException
*/
- private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler)
+ private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler, $template = null)
{
- $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser,
- "<?php \$_smarty_tpl->inheritance->endChild();\n?>\n");
+ $inlineUids = '';
+ if (isset($template) && $compiler->smarty->merge_compiled_includes) {
+ $code = $compiler->compileTag('include', array($template, array('scope' => 'parent')));
+ if (preg_match('/([,][\s]*[\'][a-z0-9]+[\'][,][\s]*[\']content.*[\'])[)]/', $code, $match)) {
+ $inlineUids = $match[ 1 ];
+ }
+ }
+ $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ '<?php $_smarty_tpl->inheritance->endChild($_smarty_tpl' .
+ (isset($template) ?
+ ", {$template}{$inlineUids}" :
+ '') . ");\n?>"
+ );
}
/**
* Add code for including subtemplate to end of template
*
* @param \Smarty_Internal_TemplateCompilerBase $compiler
- * @param string $file subtemplate name
+ * @param string $template subtemplate name
+ *
+ * @throws \SmartyCompilerException
+ * @throws \SmartyException
*/
- private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $file)
+ private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $template)
{
- $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser,
- $compiler->compileTag('include',
- array($file,
- array('scope' => 'parent'))));
+ $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ $compiler->compileTag(
+ 'include',
+ array(
+ $template,
+ array('scope' => 'parent')
+ )
+ )
+ );
}
/**
* Create source code for {extends} from source components array
*
- * @param []\Smarty_Internal_Template_Source $components
+ * @param \Smarty_Internal_Template $template
*
* @return string
*/
- public static function extendsSourceArrayCode($components)
+ public static function extendsSourceArrayCode(Smarty_Internal_Template $template)
{
$resources = array();
- foreach ($components as $source) {
+ foreach ($template->source->components as $source) {
$resources[] = $source->resource;
}
- return '{extends file=\'extends:' . join('|', $resources) . '\' extends_resource=true}';
+ return $template->smarty->left_delimiter . 'extends file=\'extends:' . join('|', $resources) .
+ '\' extends_resource=true' . $template->smarty->right_delimiter;
}
}