diff options
Diffstat (limited to 'library/Smarty/libs/sysplugins/smarty_internal_compile_for.php')
-rw-r--r-- | library/Smarty/libs/sysplugins/smarty_internal_compile_for.php | 60 |
1 files changed, 42 insertions, 18 deletions
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php index a624b922c..7b86d4859 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php +++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php @@ -34,6 +34,7 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase */ public function compile($args, $compiler, $parameter) { + $compiler->loopNesting++; if ($parameter == 0) { $this->required_attributes = array('start', 'to'); $this->optional_attributes = array('max', 'step'); @@ -44,30 +45,51 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase // check and get attributes $_attr = $this->getAttributes($compiler, $args); - $output = "<?php "; + $output = "<?php\n"; if ($parameter == 1) { foreach ($_attr['start'] as $_statement) { - $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;"; - $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value];\n"; + if (is_array($_statement['var'])) { + $var = $_statement['var']['var']; + $index = $_statement['var']['smarty_internal_index']; + } else { + $var = $_statement['var']; + $index = ''; + } + $output .= "\$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable;\n"; + $output .= "\$_smarty_tpl->tpl_vars[$var]->value{$index} = {$_statement['value']};\n"; } - $output .= " if ($_attr[ifexp]) { for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$_attr[var]]->value$_attr[step]) {\n"; + if (is_array($_attr['var'])) { + $var = $_attr['var']['var']; + $index = $_attr['var']['smarty_internal_index']; + } else { + $var = $_attr['var']; + $index = ''; + } + $output .= "if ($_attr[ifexp]) {\nfor (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$var]->value{$index}$_attr[step]) {\n"; } else { $_statement = $_attr['start']; - $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;"; + if (is_array($_statement['var'])) { + $var = $_statement['var']['var']; + $index = $_statement['var']['smarty_internal_index']; + } else { + $var = $_statement['var']; + $index = ''; + } + $output .= "\$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable;"; if (isset($_attr['step'])) { - $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = $_attr[step];"; + $output .= "\$_smarty_tpl->tpl_vars[$var]->step = $_attr[step];"; } else { - $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = 1;"; + $output .= "\$_smarty_tpl->tpl_vars[$var]->step = 1;"; } if (isset($_attr['max'])) { - $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int) min(ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step)),$_attr[max]);\n"; + $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) min(ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step)),$_attr[max]);\n"; } else { - $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int) ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step));\n"; + $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step));\n"; } - $output .= "if (\$_smarty_tpl->tpl_vars[$_statement[var]]->total > 0) {\n"; - $output .= "for (\$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value], \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration = 1;\$_smarty_tpl->tpl_vars[$_statement[var]]->iteration <= \$_smarty_tpl->tpl_vars[$_statement[var]]->total;\$_smarty_tpl->tpl_vars[$_statement[var]]->value += \$_smarty_tpl->tpl_vars[$_statement[var]]->step, \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration++) {\n"; - $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->first = \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration == 1;"; - $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->last = \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration == \$_smarty_tpl->tpl_vars[$_statement[var]]->total;"; + $output .= "if (\$_smarty_tpl->tpl_vars[$var]->total > 0) {\n"; + $output .= "for (\$_smarty_tpl->tpl_vars[$var]->value{$index} = $_statement[value], \$_smarty_tpl->tpl_vars[$var]->iteration = 1;\$_smarty_tpl->tpl_vars[$var]->iteration <= \$_smarty_tpl->tpl_vars[$var]->total;\$_smarty_tpl->tpl_vars[$var]->value{$index} += \$_smarty_tpl->tpl_vars[$var]->step, \$_smarty_tpl->tpl_vars[$var]->iteration++) {\n"; + $output .= "\$_smarty_tpl->tpl_vars[$var]->first = \$_smarty_tpl->tpl_vars[$var]->iteration == 1;"; + $output .= "\$_smarty_tpl->tpl_vars[$var]->last = \$_smarty_tpl->tpl_vars[$var]->iteration == \$_smarty_tpl->tpl_vars[$var]->total;"; } $output .= "?>"; @@ -127,6 +149,7 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase */ public function compile($args, $compiler, $parameter) { + $compiler->loopNesting--; // check and get attributes $_attr = $this->getAttributes($compiler, $args); // must endblock be nocache? @@ -136,10 +159,11 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('for', 'forelse')); - if ($openTag == 'forelse') { - return "<?php } ?>"; - } else { - return "<?php }} ?>"; - } + $output = "<?php }\n"; + if ($openTag != 'forelse') { + $output .= "}\n"; + } + $output .= "?>\n"; + return $output; } } |