Kuboff, вы правильно нашли конструкцию, и для того чтобы изменить вывод на "слева-направо и сверху-вниз", необходимо в этой конструкции убрать тэги столбца, т.е.
<xsl:if test="count(tag) = 0 and count(shop_producer) = 0 and count(//shop_group[parent_id=$group]) > 0">
<table width="100%" border="0" cellpadding="3" cellspacing="0">
<tr>
<xsl:apply-templates select=".//shop_group[parent_id=$group]"/>
</tr>
</table>
</xsl:if>
И фрагмент
<!-- Шаблон для групп товара -->
<xsl:template match="group">
...
</xsl:template>
заменить на следующий:
<!-- Шаблон для групп товара -->
<xsl:template match="group">
<td width="33%" valign="top">
<xsl:variable name="parent_id" select="@parent"/>
<div style="margin-bottom: 15px;">
<a href="{/shop/path}{fullpath}" style="font-weight: bold">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a> <span style="color: #aaaaaa">(<xsl:value-of select="count_all_items"/>)</span>
<br/>
<xsl:value-of disable-output-escaping="yes" select="description"/>
<xsl:if test="count(group) > 1">
<xsl:apply-templates select="group" mode="sub_group"/>
</xsl:if>
</div>
</td>
<xsl:if test="position() mod 3 = 0">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
</xsl:if>
</xsl:template>