Схлопывание каталога товаров на n-ом уровне

#
Схлопывание каталога товаров на n-ом уровне
Доброго дня! Ситуация такая - при переходе в каталоге товаров на 4 уровень вложенности и ниже меню "схлапывается" до 1го уровня.
Вот код каталога в макете
$My_Shop_Controller_Show = new Shop_Controller_Show(
                  Core_Entity::factory('Shop', 3)
               );
               $My_Shop_Controller_Show
                  ->xsl(
                     Core_Entity::factory('Xsl')->getByName('Рубрикатор')
                  )
                  ->groupsMode('all')
                  ->limit(0)
                  ->parseUrl()
                  ->show();


Код группировок:
<xsl:template match="/">
      <xsl:apply-templates select="/shop"/>
   </xsl:template>
   
   
   <xsl:template match="/shop">
      <!-- Получаем ID родительской группы и записываем в переменную $group -->
      <xsl:variable name="group" select="group"/>
      <ul class="catalog-rubricator-list">
         <xsl:apply-templates select="shop_group"/>
      </ul>
   </xsl:template>
   
   
   <!-- Шаблон для групп товара -->
   <xsl:template match="shop_group">
      <xsl:variable name="chosen_group" select="//shop/group" />
      <li>
         <a href="{url}">
            
            <xsl:if test="@id  = //shop/group">
               <xsl:attribute name="class">current</xsl:attribute>
            </xsl:if>
            
            <xsl:value-of disable-output-escaping="yes" select="name"/>
            
            <xsl:if test="count(shop_group) &gt; 0" >
               <i class="fa fa-angle-down"></i>
            </xsl:if>
            
         </a>
         <xsl:if test="@id = $chosen_group or count(shop_group[@id = $chosen_group]) &gt; 0 or count(shop_group/shop_group[@id = $chosen_group]) &gt; 0" >
            <ul class="list1_child">
               <xsl:apply-templates select="shop_group" mode="children"/>
            </ul>
         </xsl:if>
      </li>
   </xsl:template>
   
   <!-- Для каждого уровня вложенности создать свой children! -->
   <xsl:template match="shop_group" mode="children">
      <xsl:variable name="chosen_group" select="//shop/group" />
      <li>
         <a href="{url}">
            <xsl:if test="@id  = //shop/group">
               <xsl:attribute name="class">current</xsl:attribute>
            </xsl:if>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
            <xsl:if test="count(shop_group) &gt; 0" >
               <i class="fa fa-angle-down"></i>
            </xsl:if>
         </a>
         <xsl:if test="@id = $chosen_group or count(shop_group[@id = $chosen_group]) &gt; 0" >
            <ul class="list2_child">
               <xsl:apply-templates select="shop_group" mode="children2"/>
            </ul>
         </xsl:if>
      </li>
   </xsl:template>
   
   <!-- Для каждого уровня вложенности создать свой children! -->
   <xsl:template match="shop_group" mode="children2">
      <xsl:variable name="chosen_group" select="//shop/group" />
      <li>
         <a href="{url}">
            
            <xsl:if test="@id  = //shop/group">
               <xsl:attribute name="class">current</xsl:attribute>
            </xsl:if>
            
            <xsl:value-of disable-output-escaping="yes" select="name"/>
            
            <xsl:if test="count(shop_group) &gt; 0" >
               <i class="fa fa-angle-down"></i>
            </xsl:if>
         </a>
         <xsl:if test="@id = $chosen_group or count(shop_group[@id = $chosen_group]) &gt; 0" >
            <ul class="list3_child">
               <xsl:apply-templates select="shop_group" mode="children3"/>
            </ul>
         </xsl:if>
      </li>
   </xsl:template>
   
      <!-- Для каждого уровня вложенности создать свой children! -->
   <xsl:template match="shop_group" mode="children3">
      <xsl:variable name="chosen_group" select="//shop/group" />
      <li>
         <a href="{url}">
            
            <xsl:if test="@id  = //shop/group">
               <xsl:attribute name="class">current</xsl:attribute>
            </xsl:if>
            
            <xsl:value-of disable-output-escaping="yes" select="name"/>
            
            <xsl:if test="count(shop_group) &gt; 0" >
               <i class="fa fa-angle-down"></i>
            </xsl:if>
         </a>
         
         <xsl:if test="@id = $chosen_group or count(shop_group[@id = $chosen_group]) &gt; 0" >
            <ul class="list4_child">
               <xsl:apply-templates select="shop_group" mode="children4"/>
            </ul>
         </xsl:if>
      </li>
   </xsl:template>
   
   
   <xsl:template match="shop_group" mode="children4">
      <li>
         <a href="{url}">
            <xsl:if test="@id  = //shop/group">
                  <xsl:attribute name="class">current</xsl:attribute>
            </xsl:if>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </a>
      </li>
   </xsl:template>
Модератор
#
Re: Схлопывание каталога товаров на n-ом уровне
1. Зачем вы так пишите: //shop/group
у вас shop только в корне, есть же правильная запись: /shop/group

2. Включите XML когда меню схлопнуто и проверьте, что у вас в /shop/group
#
Re: Схлопывание каталога товаров на n-ом уровне
1.Поправил на /shop/group

2. Посмотрел в XML, переменная chosen_group, в которую по идее, должен записываться /shop/group не отображается. Причем на любом из уровней списка
Модератор
#
Re: Схлопывание каталога товаров на n-ом уровне
s.y.panferov,
а как она у вас должна отображаться? что у вас в /shop/group ?
#
Re: Схлопывание каталога товаров на n-ом уровне
Я так понимаю, переменная chosen_group дожна в XML показываться?

В XML ничего о /shop/group нет, досконально осмотрел все
#
Re: Схлопывание каталога товаров на n-ом уровне
Для чего вы пишете?
s.y.panferov писал(а):
->parseUrl()

s.y.panferov писал(а):
Я так понимаю, переменная chosen_group дожна в XML показываться?

Нет не должна в XML показываться!
s.y.panferov писал(а):
В XML ничего о /shop/group нет, досконально осмотрел все

Прямо /shop/group не найдете! В XML может выглядеть так:
<shop id="1">
   {Кусок фрагмента удален}
   <current_group_id>0</current_group_id>
   <group>0</group>
   <page>0</page>
   <limit>0</limit>
   <shop_group id="594">
   {Кусок фрагмента удален}
   </shop_group>
   {Кусок фрагмента удален}
</shop>
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Схлопывание каталога товаров на n-ом уровне
Seri писал(а):
Для чего вы пишете?
s.y.panferov писал(а):
->parseUrl()

Не могу дать ответа, писалось не мной
Seri писал(а):
Прямо /shop/group не найдете! В XML может выглядеть так:

При схлопнутом каталоге, как и при других комбинациях значение встает, как ни странно, правильное
В <shop>:
<group>9482</group>

В <shop_group>, на которой сворачивается:
<shop_group id="9482">

Так же заметил, что параметр subgroup_counts магазина равен 3:
   <subgroups_count>3</subgroups_count>

Сдеал Пересчитать в магазине, ничего не изменилось
Модератор
#
Re: Схлопывание каталога товаров на n-ом уровне
Seri,
пишут parseUrl(), чтобы не определять группу и не передавать ее из вне. Но не знают, что вызови этот макет не на странице ИС можно получать 404 ошибку.
#
Re: Схлопывание каталога товаров на n-ом уровне
HostCMS писал(а):
пишут parseUrl(), чтобы не определять группу и не передавать ее из вне. Но не знают, что вызови этот макет не на странице ИС можно получать 404 ошибку.

Но вызываю то я из страницы магазина, в любом случае.

Тем не менее, предлагаете отказаться от этого вызова и попробовать вручную определить группу в XSl шаблоне?
Модератор
#
Re: Схлопывание каталога товаров на n-ом уровне
s.y.panferov писал(а):
Тем не менее, предлагаете отказаться от этого вызова и попробовать вручную определить группу в XSl шаблоне?

http://www.hostcms.ru/documentation/modules/core/controllers/
Передача контроллеру структуры идентификатора текущего инфоэлемента и группы
Только у вас вместо Informationsystem будет Shop везде.
Авторизация