Subversion Repositories ALCASAR

Rev

Details | Last modification | View Log

Rev Author Line No. Line
2809 rexy 1
<?php
2
/**
3
 * Smarty Internal Plugin Compile While
4
 * Compiles the {while} tag
5
 *
6
 * @package    Smarty
7
 * @subpackage Compiler
8
 * @author     Uwe Tews
9
 */
10
 
11
/**
12
 * Smarty Internal Plugin Compile While Class
13
 *
14
 * @package    Smarty
15
 * @subpackage Compiler
16
 */
17
class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
18
{
19
    /**
20
     * Compiles code for the {while} tag
21
     *
22
     * @param array                                 $args      array with attributes from parser
23
     * @param \Smarty_Internal_TemplateCompilerBase $compiler  compiler object
24
     * @param array                                 $parameter array with compilation parameter
25
     *
26
     * @return string compiled code
27
     * @throws \SmartyCompilerException
28
     */
29
    public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
30
    {
31
        $compiler->loopNesting++;
32
        // check and get attributes
33
        $_attr = $this->getAttributes($compiler, $args);
34
        $this->openTag($compiler, 'while', $compiler->nocache);
35
        if (!array_key_exists('if condition', $parameter)) {
36
            $compiler->trigger_template_error('missing while condition', null, true);
37
        }
38
        // maybe nocache because of nocache variables
39
        $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
40
        if (is_array($parameter[ 'if condition' ])) {
41
            if ($compiler->nocache) {
42
                // create nocache var to make it know for further compiling
43
                if (is_array($parameter[ 'if condition' ][ 'var' ])) {
44
                    $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
45
                } else {
46
                    $var = $parameter[ 'if condition' ][ 'var' ];
47
                }
48
                $compiler->setNocacheInVariable($var);
49
            }
50
            $prefixVar = $compiler->getNewPrefixVariable();
51
            $assignCompiler = new Smarty_Internal_Compile_Assign();
52
            $assignAttr = array();
53
            $assignAttr[][ 'value' ] = $prefixVar;
54
            if (is_array($parameter[ 'if condition' ][ 'var' ])) {
55
                $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
56
                $_output = "<?php while ({$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]}) {?>";
57
                $_output .= $assignCompiler->compile(
58
                    $assignAttr,
59
                    $compiler,
60
                    array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
61
                );
62
            } else {
63
                $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
64
                $_output = "<?php while ({$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]}) {?>";
65
                $_output .= $assignCompiler->compile($assignAttr, $compiler, array());
66
            }
67
            return $_output;
68
        } else {
69
            return "<?php\n while ({$parameter['if condition']}) {?>";
70
        }
71
    }
72
}
73
 
74
/**
75
 * Smarty Internal Plugin Compile Whileclose Class
76
 *
77
 * @package    Smarty
78
 * @subpackage Compiler
79
 */
80
class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
81
{
82
    /**
83
     * Compiles code for the {/while} tag
84
     *
85
     * @param array                                 $args     array with attributes from parser
86
     * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
87
     *
88
     * @return string compiled code
89
     */
90
    public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
91
    {
92
        $compiler->loopNesting--;
93
        // must endblock be nocache?
94
        if ($compiler->nocache) {
95
            $compiler->tag_nocache = true;
96
        }
97
        $compiler->nocache = $this->closeTag($compiler, array('while'));
98
        return "<?php }?>\n";
99
    }
100
}