Se non ho capito male, ti basta seguire la logica di questo esempio (tratto da http://smarty.php.net/ ):

codice:
* Monte Ohrt March 4, 2002 *}
{* $cols is the number of columns you want *}
<TABLE border=1>
    <TR>
    {section name=numloop loop=$data}
        <TD>{$data[numloop]}</TD>
        {* see if we should go to the next row *}
        {if not ($smarty.section.numloop.rownum mod $cols)}
                {if not $smarty.section.numloop.last}
                        </TR><TR>
                {/if}
        {/if}
        {if $smarty.section.numloop.last}
                {* pad the cells not yet created *}
                {math equation = "n - a % n" n=$cols a=$data|@count assign="cells"}
                {if $cells ne $cols}
                {section name=pad loop=$cells}
                        <TD></TD>
                {/section}
                {/if}
                </TR>
        {/if}
    {/section}
</TABLE>