aboutsummaryrefslogtreecommitdiffstats
path: root/include/smarty/libs/sysplugins/smarty_internal_compile_while.php
diff options
context:
space:
mode:
Diffstat (limited to 'include/smarty/libs/sysplugins/smarty_internal_compile_while.php')
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_while.php78
1 files changed, 46 insertions, 32 deletions
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_while.php b/include/smarty/libs/sysplugins/smarty_internal_compile_while.php
index d7d986c34..bd31f6671 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_while.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_while.php
@@ -1,94 +1,108 @@
<?php
/**
* Smarty Internal Plugin Compile While
- *
* Compiles the {while} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile While Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {while} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
+ $compiler->loopNesting++;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
$this->openTag($compiler, 'while', $compiler->nocache);
- if (!array_key_exists("if condition",$parameter)) {
- $compiler->trigger_template_error("missing while condition", $compiler->lex->taglineno);
+ if (!array_key_exists("if condition", $parameter)) {
+ $compiler->trigger_template_error("missing while condition", null, true);
}
// maybe nocache because of nocache variables
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ $_output = "<?php\n";
if (is_array($parameter['if condition'])) {
if ($compiler->nocache) {
$_nocache = ',true';
// create nocache var to make it know for further compiling
if (is_array($parameter['if condition']['var'])) {
- $compiler->template->tpl_vars[trim($parameter['if condition']['var']['var'], "'")] = new Smarty_variable(null, true);
+ $var = trim($parameter['if condition']['var']['var'], "'");
} else {
- $compiler->template->tpl_vars[trim($parameter['if condition']['var'], "'")] = new Smarty_variable(null, true);
+ $var = trim($parameter['if condition']['var'], "'");
+ }
+ if (isset($compiler->template->tpl_vars[$var])) {
+ $compiler->template->tpl_vars[$var]->nocache = true;
+ } else {
+ $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true);
}
} else {
$_nocache = '';
}
if (is_array($parameter['if condition']['var'])) {
- $_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";
- $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . "){?>";
+ $_output .= "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->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] .
+ "$_nocache);\n";
+ $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" .
+ $parameter['if condition']['var']['smarty_internal_index'] . " = " .
+ $parameter['if condition']['value'] . ") {?>";
} else {
- $_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});";
- $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . "){?>";
+ $_output .= "if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] .
+ "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] .
+ "] = new Smarty_Variable(null{$_nocache});";
+ $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " .
+ $parameter['if condition']['value'] . ") {?>";
}
- return $_output;
} else {
- return "<?php while ({$parameter['if condition']}){?>";
- }
+ $_output .= "while ({$parameter['if condition']}) {?>";
+ }
+ return $_output;
}
-
}
/**
* Smarty Internal Plugin Compile Whileclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/while} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return string compiled code
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
+ $compiler->loopNesting--;
// must endblock be nocache?
if ($compiler->nocache) {
$compiler->tag_nocache = true;
}
$compiler->nocache = $this->closeTag($compiler, array('while'));
- return "<?php }?>";
+ return "<?php }?>\n";
}
-
}
-
-?> \ No newline at end of file