Как определить что выбрана подгруппа группы?

#
Как определить что выбрана подгруппа группы?
Здравствуйте! Есть работающий код,для разворачивания меню,когда мы находимся в ГЛАВНОЙ группе,но когда мы находимся в подгруппе ГЛАВНОЙ группы,то код не работает. Там суть в том,что я проверяю через условие и это условие дает li тегу стиль display:block. Но так получается что работает только для главной группы:
Ниже весь код,а жирным выделено где весь затык. Заранее спасибо.


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:hostcms="http://www.hostcms.ru/"
   exclude-result-prefixes="hostcms">
   <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">
      <aside class="left-sidebar">
       <p class="left-sidebar__title">Каталог продукции</p>
            <ul class="catalog-menu">
               <xsl:apply-templates select="shop_group"/>
            </ul>         
      </aside>
   </xsl:template>

   <!-- Шаблон для групп товара -->
   <xsl:template match="shop_group">      
      <li class="catalog-menu__item">
         
         <xsl:if test="@id = /shop/current_group_id">
               <xsl:attribute name="class">catalog-menu__item catalog-menu__item_active</xsl:attribute>
         </xsl:if>
         
         <span>            
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </span>
         
         <!-- Если есть подгруппы -->
         <xsl:if test="shop_group">
            <ul class="catalog-menu-inner">
               <xsl:if test="@id = /shop/current_group_id">
                  <xsl:attribute name="style">display: block</xsl:attribute>
               </xsl:if>
               <xsl:apply-templates select="shop_group" mode="shop_subgroup"/>
            </ul>
         </xsl:if>

      </li>
   </xsl:template>
   
   <xsl:template match="shop_group" mode="shop_subgroup">
      <li class="catalog-menu-inner__item">         
         <xsl:if test="@id = /shop/current_group_id">
               <xsl:attribute name="class">catalog-menu-inner__item current</xsl:attribute>
         </xsl:if>         
         <xsl:if test="shop_group and position() = last()">
            <xsl:attribute name="class">catalog-menu-inner__item catalog-menu-inner__item_last</xsl:attribute>
         </xsl:if>
         <a href="{url}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
      </li>
   </xsl:template>      
</xsl:stylesheet>


#
Re: Как определить что выбрана подгруппа группы?
pd-art,
такую проверку лучше делать на js, т.к. могут потом еще возникнуть сложности если появятся подподгруппы

принцип такой, отмечаем текущую группу каким нить классом и всем потомкам до верхнего уровня ul.catalog-menu задаем класс display:block
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Как определить что выбрана подгруппа группы?
alexpimnev, ну так то да....плюс еще выбранный товар должен сохранять открытое меню.
Странно почему из коробки эту функцию не реализуют? Мне кажется многим бы пригодилось,тем более если много категорий и статично разворачивать меню не вариант.
#
Re: Как определить что выбрана подгруппа группы?
alexpimnev, наваял такое,работает, НО открывает все выпадающие меню (ну понятно, у них общий класс,которому я присвоил display: block)

if($('.catalog-menu-inner__item').hasClass('current')) {
         $('.catalog-menu-inner').css("display","block");
}


Как мне открывать только текущий? Или я уже много хочу)))
#
Re: Как определить что выбрана подгруппа группы?
alexpimnev, хотя есть способ...вы не знаете как создать условие, типа если .catalog-menu-inner содержит catalog-menu-inner__item current, то catalog-menu-inner display:block? Тут как бы проверить родителя на состояние класса потомка и его же(родителя) изменить.
#
Re: Как определить что выбрана подгруппа группы?
pd-art,
Позже напишу решение
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Как определить что выбрана подгруппа группы?
https://jsfiddle.net/alexpimnev/tf3wd5st/

hasChild - class проставляем всем li где есть подуровни
current - class проставляем текущему li группы в которой находимся
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Как определить что выбрана подгруппа группы?
alexpimnev, спасибо в браузере попробовал.работает. Но тут есть проблема. Как мне проверить,что у li есть ul?
Т.е. типа

   <!-- Шаблон для групп товара -->
   <xsl:template match="shop_subgroup">
      <li class="catalog-menu__item">         
         <xsl:if test="@id = /shop/current_group_id">
            <xsl:attribute name="class">catalog-menu__item hasChild</xsl:attribute>
         </xsl:if>
         
         <span>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </span>
         
         <!-- Если есть подгруппы -->
         <xsl:if test="shop_group">
            <ul class="catalog-menu-inner">
               <xsl:if test="@id = /shop/current_group_id">
                  <xsl:attribute name="style">display: block</xsl:attribute>
               </xsl:if>
               <xsl:apply-templates select="shop_group" mode="shop_subgroup"/>
            </ul>
         </xsl:if>
      </li>
   </xsl:template>  
#
Re: Как определить что выбрана подгруппа группы?
pd-art,
вы же вот проверяете
<xsl:if test="shop_group"> ... </xsl:if>
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Как определить что выбрана подгруппа группы?
alexpimnev, все разобрался. Сделал так:


<!-- Шаблон для групп товара -->
   <xsl:template match="shop_group">
      <li class="catalog-menu__item">

         <xsl:if test="@id = /shop/current_group_id">
            <xsl:attribute name="class">catalog-menu__item catalog-menu__item_active</xsl:attribute>
         </xsl:if>
         
         <xsl:if test="shop_group">
            <xsl:attribute name="class">catalog-menu__item hasChild</xsl:attribute>
         </xsl:if>

         
         <span>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </span>
         
         <!-- Если есть подгруппы -->
         <xsl:if test="shop_group">
            <ul class="catalog-menu-inner">
               <xsl:if test="@id = /shop/current_group_id">
                  <xsl:attribute name="style">display: block</xsl:attribute>
               </xsl:if>
               <xsl:apply-templates select="shop_group" mode="shop_subgroup"/>
            </ul>
         </xsl:if>
      </li>
   </xsl:template>


Спасибо вам большое! В решения можно добавить. Многим пригодится
Авторизация