Многоуровневое меню групп магазина

#
Многоуровневое меню групп магазина
Здравствуйте!

Выводим группы в макете так:


<?php
$shop = new shop();
$ShopId = 6;
$rez = array();
$rez = $shop->GetItemPath($ShopId);
$external_propertys = array();
$external_propertys['ТекущаяГруппа'] = $rez['group'];
$param = array('current_group_id' => 0, 'items_on_page' => 10);
$param['xml_show_group_type'] = 'all';
$xsl_catalog = 'ГруппыМагазинаЛ';
$shop->ShowShop($ShopId, $xsl_catalog, $param, $external_propertys);
?>



Шаблон


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />
<xsl:template match="/">
<xsl:apply-templates select="shop"/>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
<xsl:variable name="current_group_id" select="/shop/ТекущаяГруппа"/>
<xsl:variable name="parent_group_id" select="@current_group_id"/>
<!-- <xsl:variable name="class_block">
<xsl:choose>
<xsl:when test="$current_group_id = @id or count(.//group[@id=$current_group_id])=1">
<xsl:text>sm_btn_1 sm_btn_open m_last_1</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>nsm_btn_1 sm_btn_open m_last_1</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable> -->

<xsl:apply-templates select="//group[@parent=0]"/>

</xsl:template>
<!-- Шаблон для групп товара -->
<xsl:template match="group">
<xsl:variable name="current_group_id" select="/shop/ТекущаяГруппа"/>
<div class="nsm_btn_2 m_center">
<xsl:if test="$current_group_id = @id or count(.//group[@id=$current_group_id])=1">
<xsl:attribute name="class">
<xsl:text>sm_btn_2 m_center</xsl:text>
</xsl:attribute>
</xsl:if>
<a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</div>
<!-- Если есть подгруппы -->
<xsl:if test="group and $current_group_id = @id and count(.//group[@id=$current_group_id])=1">
<div class="sub_btn_menu2">
<xsl:apply-templates select="group" mode="sub"/>
</div>
</xsl:if>
</xsl:template>
<xsl:template match="group" mode="sub">
<xsl:variable name="current_group_id" select="/shop/ТекущаяГруппа"/>
<div class="nsm_btn_2 m_center">
<xsl:if test="$current_group_id = @id or count(.//group[@id=$current_group_id])=1">
<xsl:attribute name="class">
<xsl:text>sm_btn_2 m_center</xsl:text>
</xsl:attribute>
</xsl:if>
<a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></div>
</xsl:template>
</xsl:stylesheet>


Меню показывает при активной группе ее подгруппы

Скажиет пожалуйста - таким образом выводятся группы только до 2 уровня а нужно чтобы работало до 5 хотябы..
изучаю hostcms 6
#
Re: Многоуровневое меню групп магазина
napishu писал(а):
а нужно чтобы работало до 5 хотябы..
- в таком случае вместо:
<!-- Если есть подгруппы -->
<xsl:if test="group and $current_group_id = @id and count(.//group[@id=$current_group_id])=1">
<div class="sub_btn_menu2">
<xsl:apply-templates select="group" mode="sub"/>
</div>
</xsl:if>

используйте:
<!-- Если есть подгруппы -->
<xsl:if test="group and ($current_group_id = @id or count(.//group[@id=$current_group_id])=1)">
<div class="sub_btn_menu2">
<xsl:apply-templates select="group" mode="sub"/>
</div>
</xsl:if>


а вместо:
<xsl:template match="group" mode="sub">
<xsl:variable name="current_group_id" select="/shop/ТекущаяГруппа"/>
<div class="nsm_btn_2 m_center">
<xsl:if test="$current_group_id = @id or count(.//group[@id=$current_group_id])=1">
<xsl:attribute name="class">
<xsl:text>sm_btn_2 m_center</xsl:text>
</xsl:attribute>
</xsl:if>
<a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></div>
</xsl:template>


используйте:
<xsl:template match="group" mode="sub">
<xsl:variable name="current_group_id" select="/shop/ТекущаяГруппа"/>
<div class="nsm_btn_2 m_center">
<xsl:if test="$current_group_id = @id or count(.//group[@id=$current_group_id])=1">
<xsl:attribute name="class">
<xsl:text>sm_btn_2 m_center</xsl:text>
</xsl:attribute>
</xsl:if>
<a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></div>

<!-- Если есть подгруппы -->
<xsl:if test="group and ($current_group_id = @id or count(.//group[@id=$current_group_id])=1)">
<div class="sub_btn_menu2">
<xsl:apply-templates select="group" mode="sub"/>
</div>
</xsl:if>

</xsl:template>
Авторизация