В смарти можно использовать встроенные переменные цикла вместо $i. Вот пример:
{* этот шаблон выведет 0|1, 1|2, 2|3, ... и т.д. *} {foreach $arr as $a name=foo} {$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration}, {/foreach}