Имеется, например, такая номенклатура в 1с:
Группа1
|---Подгруппа1
|---Подгруппа2
Группа2
|---Подгруппа12
|---Подгруппа22
Так реализовано для удоства работы в самой 1с (она ведущая по отношению к сайту).
На сайте же нет необхоимости показывать Группу1 и Группу2, вывести сразу их подгруппы было бы хорошим решением. Вывести подгруппы на уровень выши просто штатными средствами - создаем ссылку и перемещаем ее на нужный уровень.
А вот с родительскими группами у меня получились вот такие костыли:
МагазинГруппыТоваровНаГлавной:
<!-- Шаблон для групп товара -->
<xsl:template match="shop_group">
<xsl:if test="@id != 655"> <!-- -->
<li>
<a href="{url}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="shop_group">
<xsl:if test="@id = /shop/current_group_id">
<xsl:attribute name="class">current-group</xsl:attribute>
</xsl:if>
<xsl:value-of select="name"/>
</a>
<span>(<xsl:value-of select="items_total_count" />)</span>
<xsl:if test="@id = /shop/current_group_id and count(shop_group)">
<ul>
<xsl:apply-templates select="shop_group" />
</ul>
</xsl:if>
</li>
</xsl:if><!-- -->
</xsl:template>
МагазинКаталогТоваров:
<!-- Шаблон для групп товара -->
<xsl:template match="shop_group">
<xsl:if test="@id != 655"> <!-- -->
<div class="row">
<xsl:for-each select=". | following-sibling::shop_group[position() < $n]">
<div class="col-xs-12 col-md-4 text-align-center">
<div class="category">
<div class="category-image">
<a href="{url}">
<xsl:choose>
<xsl:when test="image_small != ''">
<img data-src="{dir}{image_small}" class="lazyload"/>
</xsl:when>
<xsl:otherwise>
<img data-src="/images/default-image.png" class="lazyload"/>
</xsl:otherwise>
</xsl:choose>
</a>
</div>
<a class="category-name" href="{url}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="shop_group"><xsl:value-of select="name"/></a>
</div>
</div>
</xsl:for-each>
</div>
</xsl:if>
</xsl:template>
Как видим, я проверяю ID группы, и только если он не совпадает с теми, которые не надо выводить, группа выводится.
Конечно это работает, но выглядит как костыль. Ведь айди группы может поменяться. Может, мне придется перезаписать каталог и ID групп опять слетят.
Может есть более изящное решение?