diff options
Diffstat (limited to 'lib/smarty3/sysplugins/smarty_internal_compile_extends.php')
-rw-r--r-- | lib/smarty3/sysplugins/smarty_internal_compile_extends.php | 64 |
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; } } |