I did this using nested loops, but that means you'll need to
transform your array into rows of columns as described in other replies.
My code received a single array of products and turned it into rows of three product elements each. It works thusly:
my @rows;
while (@products) {
push @rows,
{
'loop_products' => [splice @products, 0, 3],
};
}
$template_body->param(
loop_row => \@rows,
);
Then in your template, you loop through both arrays:
<TMPL_LOOP NAME=loop_row>
<TMPL_LOOP NAME=loop_products>
Display one product here.
</TMPL_LOOP>
</TMPL_LOOP>
Works fine if your columns flow across the row. Enjoy :)