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

#
Вывод подгрупп интернет-магазина на верхней странице каталога
Добрый день, уважаемые коллеги!

Возник вопрос.
Необходимо, чтобы на первой странице каталога ( ***.ru/shop/ ) выводились две категории. К примеру: "Подарки для мужчин" и "Подарки для женщин".

Самое главное условие - чтобы под категорией выводился список подкаталогов. Для мужских подарков это ремни, кошельки, спортивные сумки. Для женских - это различные аксессуары, перчатки и т.д.

Как это возможно реализовать
Пробовал через
<?php
// Разделы магазина
if (Core::moduleIsActive('shop'))
{
    $Shop_Controller_Show = new Shop_Controller_Show(
        Core_Entity::factory('Shop', 1)
    );
    $Shop_Controller_Show
        ->xsl(
            Core_Entity::factory('Xsl')->getByName('Каталог2')
        )
        ->groupsMode('tree')
        ->group(FALSE)
        ->limit(5)
        ->show();
}
?>



В XLS-шаблоне "Каталог 2", соответственно, код, приведенный на странице:
http://www.hostcms.ru/documentation/guide/modules/shop/show-groups/

Однако, это не помогает. Отображаются только две верхние категории, подгруппы не видны. Как исправить данную ситуацию



Модератор
#
Re: Вывод подгрупп интернет-магазина на верхней странице каталога
Таким образом в XML групп и не будет, у Вас группа FALSE и режим tree. Поменяйте режим на all (если групп немного) или наследуйте контроллер и внесите в него небольшие изменения
#
Re: Вывод подгрупп интернет-магазина на верхней странице каталога
Добрый вечер.
Дело в том, что пробовал по разному, в т.ч. и со значением all. Только вот все равно не работает: выводятся только верхний уровень каталогом ИМ. То есть те самые две группы - "подарки для мужчин" и "подарки для женщин"
#
Re: Вывод подгрупп интернет-магазина на верхней странице каталога
Здравствуйте! Подскажите пожалуйста по данному вопросу как у Slipper'а где можно найти решение для hostcms 6, у меня на главной меню интернет магазина, где 2 группы интернет магазина, мне надо чтобы там также отображались ихние подгруппы.
Например у меня:
группа1
группа2

а надо:
группа1
  - подгруппа1
  - подгруппа2
  - и т.д.
группа2
- подгруппа1
  - подгруппа2
  - и т.д.

все изрыскал, нигде не могу найти, нашел решение для старых версий но там все как-то по другому, можете помочь?
Модератор
#
Re: Вывод подгрупп интернет-магазина на верхней странице каталога
Все просто. Указываете
->groupsMode('all')
, чтобы в XML шли все группы, а дальше на XSL делаете показ подгрупп в темплейте групп.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Вывод подгрупп интернет-магазина на верхней странице каталога
в макете я поставил ->groupsMode('all'
на XSL убрал кавычки в темплейте групп,
<!-- Если есть подгруппы -->
         <xsl:if test="shop_group">
            <ul class="left_menu gray_link gray" id="{@id}" style="display: none;">
               <xsl:apply-templates select="shop_group"/>
            </ul>
         </xsl:if>
         
, но ничего не меняется к сожалению...
#
Re: Вывод подгрупп интернет-магазина на верхней странице каталога
gamlet писал(а):
на XSL убрал кавычки в темплейте групп,


В этом XSL ?
МагазинГруппыТоваровНаГлавной
#
Re: Вывод подгрупп интернет-магазина на верхней странице каталога
Да именно в нем.
Нашел описание как это сделать на версии hostcms 6 вот так:

В код основного шаблона добавить вставку в xml узла /shop/ТекущаяГруппа.
Добавть в шаблон в месте вывода групп код:


// Разделы магазина
if (Core::moduleIsActive('shop')
{
    $Shop_Controller_Show = new Shop_Controller_Show(
    Core_Entity::factory('Shop', 1)
    );
    $Shop_Controller_Show
    ->xsl(
    Core_Entity::factory('Xsl'->getByName('МагазинГруппыТоваровНаГлавной'
    );
    $Current_Shop_Controller = Core_Page::instance()->object;
    if (is_object($Current_Shop_Controller)
    && get_class($Current_Shop_Controller) == 'Shop_Controller_Show'
    && $Current_Shop_Controller->group)
    {
        $Shop_Controller_Show
        ->addEntity(
        Core::factory('Core_Xml_Entity'
        ->name('ТекущаяГруппа'->value(intval($Current_Shop_Controller->group))
        );
    }
    
    $Shop_Controller_Show
    ->groupsMode('all'
    //->itemsForbiddenTags(array('text')
    ->group(0)
    ->limit(0)
    ->show();
}



Код XSL для Host CMS 6:

<!-- МагазинГруппыТоваровНаГлавной -->
    
    <xsl:template match="/">
        <xsl:apply-templates select="/shop"/>
    </xsl:template>
    
    <!-- Шаблон для магазина -->
    <xsl:template match="/shop">
        <ul class="shop_list level-1">
            <xsl:apply-templates select="shop_group"/>
        </ul>
    </xsl:template>
    
    <!-- Меню групп товара, вывод подгрупп текущей группы -->
    <!-- Шаблон для групп товара -->
    <xsl:template match="shop_group">
        <xsl:variable name="nesting_level" select="count(ancestor::*)"/>
        <xsl:variable name="parent" select="@id"/>
        <xsl:variable name="parent_group_id">
            <xsl:choose>
                <xsl:when test="/shop/ТекущаяГруппа/node()"><xsl:value-of select="/shop/ТекущаяГруппа"/></xsl:when>
                <xsl:otherwise>-1</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="this_group_has_subgroups"    select="subgroups_count &gt; 0" />
        <xsl:variable name="this_group_is_current"    select="@id = $parent_group_id" />
        <xsl:variable name="has_subgroups"    select="(@id = $parent_group_id and count(shop_group) &gt; 0)
            or (@id != $parent_group_id and count(.//shop_group[@id = $parent_group_id]) &gt; 0)" />
        <xsl:variable name="item_nesting_level">
            level-<xsl:value-of disable-output-escaping="yes" select="$nesting_level+1"/>
        </xsl:variable>
        
        <!-- Готовим класс элемента -->
        <xsl:variable name="item_css_class">
            <xsl:if test="$this_group_has_subgroups = 1"> sub</xsl:if>
            <xsl:if test="$this_group_is_current = 1"> active</xsl:if>
        </xsl:variable>
        
        <li>
            <xsl:if test="normalize-space($item_css_class) != '' ">
                <xsl:attribute name="class">
                    <xsl:value-of disable-output-escaping="yes" select="normalize-space($item_css_class)"/>
                </xsl:attribute>
            </xsl:if>
            <xsl:if test="$this_group_is_current = 1">
                <span title="{name}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="shop_group">
                    <xsl:value-of disable-output-escaping="yes" select="name"/>
                </span>
            </xsl:if>
            <xsl:if test="@id != $parent_group_id">
                <a href="{url}" title="{name}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="shop_group">
                    <xsl:value-of disable-output-escaping="yes" select="name"/>
                </a>
            </xsl:if>
            
            <!-- Если есть подгруппы -->
            <xsl:if test="$has_subgroups = 1">
                <ul id="group-{@id}">
                    <xsl:if test="normalize-space($item_nesting_level) != '' ">
                        <xsl:attribute name="class">
                            <xsl:value-of disable-output-escaping="yes" select="normalize-space($item_nesting_level)"/>
                        </xsl:attribute>
                    </xsl:if>
                    <xsl:apply-templates select="shop_group"/>
                </ul>
            </xsl:if>
        </li>
    </xsl:template>

Получаем на выходе HTML:

<ul class="shop_list level-1">
  <li class="sub">
    <a class="hostcmsEditable" xmlns:hostcms="http://www.hostcms.ru/" href="/shop/costume-jewellery/" title="Бижутерия" hostcms:id="593" hostcms:field="name" hostcms:entity="shop_group">Бижутерия</a>
  </li>
  <li>
    <a class="hostcmsEditable" xmlns:hostcms="http://www.hostcms.ru/" href="/shop/handmade/" title="Handmade" hostcms:id="592" hostcms:field="name" hostcms:entity="shop_group">Handmade</a>
  </li>
  <li class="sub active">
    <span class="hostcmsEditable" xmlns:hostcms="http://www.hostcms.ru/" title="Для волос" hostcms:id="591" hostcms:field="name" hostcms:entity="shop_group">Для волос</span>
    <ul id="group-591" class="level-2">
      <li>
        <a class="hostcmsEditable" xmlns:hostcms="http://www.hostcms.ru/" href="/shop/for-the-hair/gum/" title="Резинки" hostcms:id="598" hostcms:field="name" hostcms:entity="shop_group">Резинки</a>
      </li>
      <li>
        <a class="hostcmsEditable" xmlns:hostcms="http://www.hostcms.ru/" href="/shop/for-the-hair/barrettes/" title="Заколки" hostcms:id="599" hostcms:field="name" hostcms:entity="shop_group">Заколки</a>
      </li>
      <li>
        <a class="hostcmsEditable" xmlns:hostcms="http://www.hostcms.ru/" href="/shop/for-the-hair/crabs/" title="Крабы" hostcms:id="600" hostcms:field="name" hostcms:entity="shop_group">Крабы</a>
      </li>
      <li>
        <a class="hostcmsEditable" xmlns:hostcms="http://www.hostcms.ru/" href="/shop/for-the-hair/combs/" title="Гребни" hostcms:id="601" hostcms:field="name" hostcms:entity="shop_group">Гребни</a>
      </li>
    </ul>
  </li>
  <li class="sub">
    <a class="hostcmsEditable" xmlns:hostcms="http://www.hostcms.ru/" href="/shop/accessories/" title="Аксессуары" hostcms:id="590" hostcms:field="name" hostcms:entity="shop_group">Аксессуары</a>
  </li>
</ul>

В этом коде реализовано вывод подгрупп у групп при нажатии на соответствующую группу, при нажатии на другую список закрывается.
Скажите кто-нибудь пожалуйста что заменить в этом коде чтобы группы и подгруппы всегда были в раскрытом состоянии.
Авторизация