Commit | Line | Data |
---|---|---|
2aa91ff2 S |
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 object $compiler compiler object | |
24 | * @param array $parameter array with compilation parameter | |
25 | * | |
26 | * @return string compiled code | |
27 | */ | |
28 | public function compile($args, $compiler, $parameter) | |
29 | { | |
30 | // check and get attributes | |
31 | $_attr = $this->getAttributes($compiler, $args); | |
32 | $this->openTag($compiler, 'while', $compiler->nocache); | |
33 | ||
34 | if (!array_key_exists("if condition", $parameter)) { | |
35 | $compiler->trigger_template_error("missing while condition", $compiler->lex->taglineno); | |
36 | } | |
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 | $_nocache = ',true'; | |
43 | // create nocache var to make it know for further compiling | |
44 | if (is_array($parameter['if condition']['var'])) { | |
cd8826ea | 45 | $var = trim($parameter['if condition']['var']['var'], "'"); |
2aa91ff2 | 46 | } else { |
cd8826ea S |
47 | $var = trim($parameter['if condition']['var'], "'"); |
48 | } | |
49 | if (isset($compiler->template->tpl_vars[$var])) { | |
50 | $compiler->template->tpl_vars[$var]->nocache = true; | |
51 | } else { | |
52 | $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); | |
2aa91ff2 S |
53 | } |
54 | } else { | |
55 | $_nocache = ''; | |
56 | } | |
57 | if (is_array($parameter['if condition']['var'])) { | |
58 | $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n"; | |
59 | $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>"; | |
60 | } else { | |
61 | $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"; | |
62 | $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>"; | |
63 | } | |
64 | ||
65 | return $_output; | |
66 | } else { | |
67 | return "<?php while ({$parameter['if condition']}) {?>"; | |
68 | } | |
69 | } | |
70 | } | |
71 | ||
72 | /** | |
73 | * Smarty Internal Plugin Compile Whileclose Class | |
74 | * | |
75 | * @package Smarty | |
76 | * @subpackage Compiler | |
77 | */ | |
78 | class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase | |
79 | { | |
80 | /** | |
81 | * Compiles code for the {/while} tag | |
82 | * | |
83 | * @param array $args array with attributes from parser | |
84 | * @param object $compiler compiler object | |
85 | * | |
86 | * @return string compiled code | |
87 | */ | |
88 | public function compile($args, $compiler) | |
89 | { | |
90 | // must endblock be nocache? | |
91 | if ($compiler->nocache) { | |
92 | $compiler->tag_nocache = true; | |
93 | } | |
94 | $compiler->nocache = $this->closeTag($compiler, array('while')); | |
95 | ||
96 | return "<?php }?>"; | |
97 | } | |
98 | } |