Прошло много времени с тех пор, как я использовал Smarty, но вы должны быть в состоянии сделать это так:
<tr>
{foreach from=$items key=myId item=i name=foo}
{if $smarty.foreach.foo.index % 8 == 0 && $smarty.foreach.foo.index > 0 }
</tr><tr>
{/if}
<td>{$i.label}</td>
{/foreach}
</tr>
Оператор модуля возвращает 0, только если индекс делится на 8, поэтому перед каждым 9-м элементом он добавляет новую строку. Мы не хотим, чтобы это случилось с первым элементом, поэтому давайте проверим и это.