smarty_internal_compile_capture.php (3092B)
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 */ 17 class 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 * Attribute definition: Overwrites base class. 28 * 29 * @var array 30 * @see Smarty_Internal_CompileBase 31 */ 32 public $optional_attributes = array('name', 'assign', 'append'); 33 34 /** 35 * Compiles code for the {capture} tag 36 * 37 * @param array $args array with attributes from parser 38 * @param object $compiler compiler object 39 * 40 * @return string compiled code 41 */ 42 public function compile($args, $compiler) 43 { 44 // check and get attributes 45 $_attr = $this->getAttributes($compiler, $args); 46 47 $buffer = isset($_attr['name']) ? $_attr['name'] : "'default'"; 48 $assign = isset($_attr['assign']) ? $_attr['assign'] : 'null'; 49 $append = isset($_attr['append']) ? $_attr['append'] : 'null'; 50 51 $compiler->_capture_stack[0][] = array($buffer, $assign, $append, $compiler->nocache); 52 // maybe nocache because of nocache variables 53 $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; 54 $_output = "<?php \$_smarty_tpl->_capture_stack[0][] = array($buffer, $assign, $append); ob_start(); ?>"; 55 56 return $_output; 57 } 58 } 59 60 /** 61 * Smarty Internal Plugin Compile Captureclose Class 62 * 63 * @package Smarty 64 * @subpackage Compiler 65 */ 66 class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase 67 { 68 /** 69 * Compiles code for the {/capture} tag 70 * 71 * @param array $args array with attributes from parser 72 * @param object $compiler compiler object 73 * 74 * @return string compiled code 75 */ 76 public function compile($args, $compiler) 77 { 78 // check and get attributes 79 $_attr = $this->getAttributes($compiler, $args); 80 // must endblock be nocache? 81 if ($compiler->nocache) { 82 $compiler->tag_nocache = true; 83 } 84 85 list($buffer, $assign, $append, $compiler->nocache) = array_pop($compiler->_capture_stack[0]); 86 87 $_output = "<?php list(\$_capture_buffer, \$_capture_assign, \$_capture_append) = array_pop(\$_smarty_tpl->_capture_stack[0]);\n"; 88 $_output .= "if (!empty(\$_capture_buffer)) {\n"; 89 $_output .= " if (isset(\$_capture_assign)) \$_smarty_tpl->assign(\$_capture_assign, ob_get_contents());\n"; 90 $_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n"; 91 $_output .= " Smarty::\$_smarty_vars['capture'][\$_capture_buffer]=ob_get_clean();\n"; 92 $_output .= "} else \$_smarty_tpl->capture_error();?>"; 93 94 return $_output; 95 } 96 }