fix code frame of inline (merged) subtemplate

This commit is contained in:
Uwe Tews
2015-01-03 21:32:33 +01:00
parent 8b71e591c0
commit 66eac7bc2a
2 changed files with 19 additions and 5 deletions

View File

@@ -130,7 +130,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
}
}
/*
* if the {include} tag provides individual parameter for caching or compile_id
* the subtemplate must not be included into the common cache file and is treated like
@@ -197,9 +196,9 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
// make sure whole chain gets compiled
$tpl->mustCompile = true;
if (!($tpl->source->uncompiled) && $tpl->source->exists) {
$tpl->compiler->suppressTemplatePropertyHeader = true;
// get compiled code
$compiled_code = $tpl->compiler->compileTemplate($tpl, null, $compiler->parent_compiler);
$compiled_code = Smarty_Internal_Extension_CodeFrame::createFunctionFrame($tpl, $tpl->compiler->compileTemplate($tpl, null, $compiler->parent_compiler));
$compiler->parent_compiler->mergedSubTemplatesData[$tpl_name][$uid]['nocache_hash'] = $tpl->properties['nocache_hash'];
unset($tpl->compiler);

View File

@@ -73,4 +73,19 @@ class Smarty_Internal_Extension_CodeFrame
$output .= "<?php }\n}\n?>";
return $output;
}
public static function createFunctionFrame(Smarty_Internal_Template $_template, $content = '')
{
if (!isset($_template->properties['unifunc'])) {
$_template->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
}
$output = "<?php\n";
$output .= "/*%%SmartyHeaderCode:{$_template->properties['nocache_hash']}%%*/\n";
$output .= "function {$_template->properties['unifunc']} (\$_smarty_tpl) {\n";
$output .= "?>\n" . $content;
$output .= "<?php\n";
$output .= "/*/%%SmartyNocache:{$_template->properties['nocache_hash']}%%*/\n";
$output .= "}\n?>";
return $output;
}
}