diff options
Diffstat (limited to 'include/smarty/libs/sysplugins/smarty_internal_compile_capture.php')
-rw-r--r-- | include/smarty/libs/sysplugins/smarty_internal_compile_capture.php | 62 |
1 files changed, 41 insertions, 21 deletions
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_capture.php b/include/smarty/libs/sysplugins/smarty_internal_compile_capture.php index 9a5071ebe..95c75a4b1 100644 --- a/include/smarty/libs/sysplugins/smarty_internal_compile_capture.php +++ b/include/smarty/libs/sysplugins/smarty_internal_compile_capture.php @@ -1,22 +1,21 @@ <?php /** * Smarty Internal Plugin Compile Capture - * * Compiles the {capture} tag * - * @package Smarty + * @package Smarty * @subpackage Compiler - * @author Uwe Tews + * @author Uwe Tews */ /** * Smarty Internal Plugin Compile Capture Class * - * @package Smarty + * @package Smarty * @subpackage Compiler */ -class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase { - +class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase +{ /** * Attribute definition: Overwrites base class. * @@ -24,6 +23,7 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase { * @see Smarty_Internal_CompileBase */ public $shorttag_order = array('name'); + /** * Attribute definition: Overwrites base class. * @@ -35,11 +35,12 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase { /** * Compiles code for the {capture} tag * - * @param array $args array with attributes from parser - * @param object $compiler compiler object + * @param array $args array with attributes from parser + * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object + * * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { // check and get attributes $_attr = $this->getAttributes($compiler, $args); @@ -51,29 +52,50 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase { $compiler->_capture_stack[0][] = array($buffer, $assign, $append, $compiler->nocache); // maybe nocache because of nocache variables $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - $_output = "<?php \$_smarty_tpl->_capture_stack[0][] = array($buffer, $assign, $append); ob_start(); ?>"; + $_output = "<?php \$_smarty_tpl->_cache['capture_stack'][] = array($buffer, $assign, $append); ob_start(); ?>"; return $_output; } + /** + * Compiles code for the {$smarty.capture.xxx} + * + * @param array $args array with attributes from parser + * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object + * @param array $parameter array with compilation parameter + * + * @return string compiled code + * @throws \SmartyCompilerException + */ + public static function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) + { + // make all lower case + $parameter = array_map('strtolower', $parameter); + $tag = trim($parameter[0], '"\''); + if (!isset($parameter[1]) || false === $name = $compiler->getId($parameter[1])) { + $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true); + } + return "isset(\$_smarty_tpl->_cache['__smarty_capture']['{$name}']) ? \$_smarty_tpl->_cache['__smarty_capture']['{$name}'] : null"; + } } /** * Smarty Internal Plugin Compile Captureclose Class * - * @package Smarty + * @package Smarty * @subpackage Compiler */ -class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase { - +class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase +{ /** * Compiles code for the {/capture} tag * - * @param array $args array with attributes from parser - * @param object $compiler compiler object + * @param array $args array with attributes from parser + * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object + * * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { // check and get attributes $_attr = $this->getAttributes($compiler, $args); @@ -84,15 +106,13 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase { list($buffer, $assign, $append, $compiler->nocache) = array_pop($compiler->_capture_stack[0]); - $_output = "<?php list(\$_capture_buffer, \$_capture_assign, \$_capture_append) = array_pop(\$_smarty_tpl->_capture_stack[0]);\n"; + $_output = "<?php list(\$_capture_buffer, \$_capture_assign, \$_capture_append) = array_pop(\$_smarty_tpl->_cache['capture_stack']);\n"; $_output .= "if (!empty(\$_capture_buffer)) {\n"; $_output .= " if (isset(\$_capture_assign)) \$_smarty_tpl->assign(\$_capture_assign, ob_get_contents());\n"; $_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n"; - $_output .= " Smarty::\$_smarty_vars['capture'][\$_capture_buffer]=ob_get_clean();\n"; + $_output .= "\$_smarty_tpl->_cache['__smarty_capture'][\$_capture_buffer]=ob_get_clean();\n"; $_output .= "} else \$_smarty_tpl->capture_error();?>"; + return $_output; } - } - -?>
\ No newline at end of file |