Вывод списка товаров интернет-магазина под названиями их групп

#
Вывод списка товаров интернет-магазина под названиями их групп
В метод показа интернет-магазина(при организации показа подобного меню) ShowShop нужно передать следующие параметры:
$param['current_group_id'] = false;
$param['xml_show_group_type'] = 'all';
$param['items_on_page'] = 9999999;

После этого нужно подготовить XSL-шаблон(на базе стандартного "МагазинКаталогТоваров" ), который следует использовать для показа меню(т.е. его название нужно передать в вызов метода ShowShop). Для этого в коде, взятом из стандартного XSL-шаблона "МагазинКаталогТоваров", нужно вместо:
<xsl:apply-templates select="item" />

использовать:
<xsl:if test="$parent_group_id != 0">
<xsl:apply-templates select="item" />
</xsl:if>

вместо:
<xsl:apply-templates select="//group[@parent=$parent_group_id]"/>

использовать:
<ul>
<xsl:apply-templates select="//group[@parent=$parent_group_id]"/>
</ul>

вместо:
<!-- Шаблон для групп товара -->
<xsl:template match="group">

<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>&#xA0;<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) &gt; 1">
<xsl:apply-templates select="group" mode="sub_group"/>
</xsl:if>
</div>

<xsl:if test="position()= round(count(//group[@parent = $parent_id]) div 2)">
<xsl:text disable-output-escaping="yes">
&lt;/td&gt;
&lt;td valign="top" width="50%"&gt;
</xsl:text>
</xsl:if>
</xsl:template>

<!-- Шаблон для подразделов -->
<xsl:template match="group" mode="sub_group">
<a href="{/shop/path}{fullpath}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
<xsl:variable name="parent_id" select="@parent"/>
<!-- Ставим запятую после группы, за которой следуют еще группы из данной родителской группы -->
<xsl:if test="position() != last() and count(//group[@parent = $parent_id]) &gt; 1">,&#xA0;</xsl:if>
</xsl:template>

использовать:
<!-- Шаблон для групп товара -->
<xsl:template match="group">

<xsl:variable name="id" select="@id"/>

<li>
<a href="{/shop/path}{fullpath}" style="font-weight: bold">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>&#xA0;<span style="color: #aaaaaa">(<xsl:value-of select="count_all_items"/>)</span>

<xsl:if test="count(//item[@group = $id]) &gt; 1">
<ul>
<xsl:apply-templates select="//item[@group = $id]" mode="item_list"/>
</ul>
</xsl:if>

<xsl:if test="count(group) &gt; 1">
<ul>
<xsl:apply-templates select="group"/>
</ul>
</xsl:if>
</li>

</xsl:template>

<xsl:template match="item" mode="item_list">
<li>
<a href="{/shop/path}{fullpath}{path}/" class="cat_title">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</li>
</xsl:template>
#
Re: Вывод списка товаров интернет-магазина под названиями их групп
Да всё замечательно, только данное решение не универсально, если у групп есть подгруппы то оно не работает, при входе в группу с подгруппой опять же выводится только список групп.
#
Re: Вывод списка товаров интернет-магазина под названиями их групп
savak,
savak писал(а):
если у групп есть подгруппы то оно не работает
- что конкретно не работает?

savak писал(а):
опять же выводится только список групп
- ну если НЕПОСРЕДСТВЕННО в данной группе нет товаров, то, естественно, что они не выведутся. Если вам требуется выводить товары всех подгрупп данной группы, при условии, что в ней товары отсутствуют, то вы можете доработать функционал самостоятельно.
Авторизация