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