{counter} bug and patch

From: Date: Sat, 31 May 2003 05:31:48 +0000
Subject: {counter} bug and patch
Groups: php.smarty.dev 
Request: Send a blank email to php-smarty-dev+get-1527@lists.php.net to get a copy of this message
Hi, all. I just updated from 2.5.0 to HEAD today to see how the latest stuff is working and noticed something odd with {counter}. I have the following code: /* PHP */ for ($i = 1; $i < 10; $i++) { $children[] = 'child' . $i; } $smarty->assign('children', $children); $smarty->display('test.tpl'); {* Smarty *} {counter assign=index start=0 print=false} {$children[$index]}: {counter} <br> {$children[$index]}: {counter} <br> {$children[$index]}: {counter} <br> Now, on Smarty 2.5.0 the above generates this output: child1: child2: child3: So far so good. But in the latest code I see: child2: 1 child3: 2 child4: 3 Two things are happening. First, {counter} appears to be printing the incremented value. This is new after Smarty 2.5.0, but it also jibes with the documentation for counter so I guess this was broken in 2.5.0 and is fixed now. However, it looks like counter is no longer starting at the "start" number, but is instead starting at "start+skip" which means that the index into the array that I'm using is now off by one. I looked in function.counter.php and found that it increments the count every time, including the first time you call {counter}. I created a patch such that if you specify the start attribute, it won't increment the count for that invocation. -Bharat Index: function.counter.php =================================================================== RCS file: /repository/smarty/libs/plugins/function.counter.php,v retrieving revision 1.8 diff -u -w -u -w -r1.8 function.counter.php --- function.counter.php 2 May 2003 22:33:15 -0000 1.8 +++ function.counter.php 31 May 2003 05:07:52 -0000 @@ -36,9 +36,11 @@ } } - if (isset($start)) + $dontIncrement = false; + if (isset($start)) { $count[$name] = $start; - else if (!isset($count[$name])) + $dontIncrement = true; + } else if (!isset($count[$name])) $count[$name]=1; if (!isset($print)) @@ -67,10 +69,12 @@ else if (!isset($dir[$name])) $dir[$name] = "up"; + if (!$dontIncrement) { if ($dir[$name] == "down") $count[$name] -= $skipval[$name]; else $count[$name] += $skipval[$name]; + } return $retval;

« previous php.smarty.dev (#1527) next »