From 7085a0c2f7104a56a7e946c43ba0b5736be5f4e7 Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 27 Dec 2016 14:47:01 +0100 Subject: * smarty bundled --- .../sysplugins/smarty_internal_compile_extends.php | 134 +++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 lib/smarty3/sysplugins/smarty_internal_compile_extends.php (limited to 'lib/smarty3/sysplugins/smarty_internal_compile_extends.php') diff --git a/lib/smarty3/sysplugins/smarty_internal_compile_extends.php b/lib/smarty3/sysplugins/smarty_internal_compile_extends.php new file mode 100644 index 0000000..949875c --- /dev/null +++ b/lib/smarty3/sysplugins/smarty_internal_compile_extends.php @@ -0,0 +1,134 @@ +getAttributes($compiler, $args); + if ($_attr[ 'nocache' ] === true) { + $compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->line - 1); + } + if (strpos($_attr[ 'file' ], '$_tmp') !== false) { + $compiler->trigger_template_error('illegal value for file attribute', $compiler->parser->lex->line - 1); + } + // add code to initialize inheritance + $this->registerInit($compiler, true); + $file = trim($_attr[ 'file' ], '\'"'); + 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 ] == '"') { + $file = trim($file, '".'); + } else { + $file = "'{$file}'"; + } + $i ++; + if ($i == count($files) && isset($_attr[ 'extends_resource' ])) { + $this->compileEndChild($compiler); + } + $this->compileInclude($compiler, $file); + } + if (!isset($_attr[ 'extends_resource' ])) { + $this->compileEndChild($compiler); + } + } else { + $this->compileEndChild($compiler); + $this->compileInclude($compiler, $_attr[ 'file' ]); + } + $compiler->has_code = false; + return ''; + } + + /** + * Add code for inheritance endChild() method to end of template + * + * @param \Smarty_Internal_TemplateCompilerBase $compiler + */ + private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler) + { + $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser, + "inheritance->endChild();\n?>\n"); + } + + /** + * Add code for including subtemplate to end of template + * + * @param \Smarty_Internal_TemplateCompilerBase $compiler + * @param string $file subtemplate name + */ + private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $file) + { + $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser, + $compiler->compileTag('include', + array($file, + array('scope' => 'parent')))); + } + + /** + * Create source code for {extends} from source components array + * + * @param []\Smarty_Internal_Template_Source $components + * + * @return string + */ + public static function extendsSourceArrayCode($components) + { + $resources = array(); + foreach ($components as $source) { + $resources[] = $source->resource; + } + return '{extends file=\'extends:' . join('|', $resources) . '\' extends_resource=true}'; + } +} -- cgit v1.2.3