1<?php 2/** 3 * Smarty Internal Plugin Compile Capture 4 * Compiles the {capture} tag 5 * 6 * @package Smarty 7 * @subpackage Compiler 8 * @author Uwe Tews 9 */ 10 11/** 12 * Smarty Internal Plugin Compile Capture Class 13 * 14 * @package Smarty 15 * @subpackage Compiler 16 */ 17class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase 18{ 19 /** 20 * Attribute definition: Overwrites base class. 21 * 22 * @var array 23 * @see Smarty_Internal_CompileBase 24 */ 25 public $shorttag_order = array('name'); 26 27 /** 28 * Attribute definition: Overwrites base class. 29 * 30 * @var array 31 * @see Smarty_Internal_CompileBase 32 */ 33 public $optional_attributes = array('name', 'assign', 'append'); 34 35 /** 36 * Compiles code for the {$smarty.capture.xxx} 37 * 38 * @param array $args array with attributes from parser 39 * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object 40 * @param array $parameter array with compilation parameter 41 * 42 * @return string compiled code 43 */ 44 public static function compileSpecialVariable( 45 $args, 46 Smarty_Internal_TemplateCompilerBase $compiler, 47 $parameter = null 48 ) { 49 return '$_smarty_tpl->smarty->ext->_capture->getBuffer($_smarty_tpl' . 50 (isset($parameter[ 1 ]) ? ", {$parameter[ 1 ]})" : ')'); 51 } 52 53 /** 54 * Compiles code for the {capture} tag 55 * 56 * @param array $args array with attributes from parser 57 * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object 58 * @param null $parameter 59 * 60 * @return string compiled code 61 */ 62 public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter = null) 63 { 64 // check and get attributes 65 $_attr = $this->getAttributes($compiler, $args, $parameter, 'capture'); 66 $buffer = isset($_attr[ 'name' ]) ? $_attr[ 'name' ] : "'default'"; 67 $assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : 'null'; 68 $append = isset($_attr[ 'append' ]) ? $_attr[ 'append' ] : 'null'; 69 $compiler->_cache[ 'capture_stack' ][] = array($compiler->nocache); 70 // maybe nocache because of nocache variables 71 $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; 72 $_output = "<?php \$_smarty_tpl->smarty->ext->_capture->open(\$_smarty_tpl, $buffer, $assign, $append);?>"; 73 return $_output; 74 } 75} 76 77/** 78 * Smarty Internal Plugin Compile Captureclose Class 79 * 80 * @package Smarty 81 * @subpackage Compiler 82 */ 83class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase 84{ 85 /** 86 * Compiles code for the {/capture} tag 87 * 88 * @param array $args array with attributes from parser 89 * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object 90 * @param null $parameter 91 * 92 * @return string compiled code 93 */ 94 public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) 95 { 96 // check and get attributes 97 $_attr = $this->getAttributes($compiler, $args, $parameter, '/capture'); 98 // must endblock be nocache? 99 if ($compiler->nocache) { 100 $compiler->tag_nocache = true; 101 } 102 list($compiler->nocache) = array_pop($compiler->_cache[ 'capture_stack' ]); 103 return "<?php \$_smarty_tpl->smarty->ext->_capture->close(\$_smarty_tpl);?>"; 104 } 105} 106