В смарти можно использовать встроенные переменные

В смарти можно использовать встроенные переменные цикла вместо $i. Вот пример:

{* этот шаблон выведет 0|1, 1|2, 2|3, ... и т.д. *}

{foreach $arr as $a name=foo}

    {$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},

{/foreach}