Выпадающее меню продукции

#
Выпадающее меню продукции
Здравствуйте, помогите разобраться с меню, мне необходимо вывести меню только для каталога, сейчас же мне летит туда все меню сайта с новостями и тд, каким образом можно сделать выборку именно для каталога?
Код показа меню в макете:
<?
                        $Structure_Controller_Show = new Structure_Controller_Show(
                           Core_Entity::factory('Site', CURRENT_SITE));

                        $Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
                           ->getByName('ЛевМеню')) // XSL-шаблон
                           ->showInformationsystemGroups(FALSE) // показываем группы инфосистемы (TRUE/FALSE)
                           ->showShopGroups(TRUE) // показываем группы магазина (TRUE/FALSE)
                           ->menu(3) // идентификатор меню
                           ->show();
                        ?>

Код XSL-шаблона:
<?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="/site">
      <div id="cssmenu-left">
         <ul>
            <!-- Выбираем узлы структуры первого уровня -->
            <xsl:apply-templates select="*[@id][show=1][active=1]" />
         </ul>
      </div>
   </xsl:template>
   
   <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
   <xsl:variable name="current_structure_id" select="/site/current_structure_id"/>
   
   <xsl:template match="*">
      <!-- Шаблон выборки дочерних узлов -->
      <xsl:variable name="sub" select="*[@id][show=1][active=1]" />
      
      <li>
         <xsl:attribute name="class">
            <xsl:if test="$current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">active </xsl:if>
            <xsl:if test="position() = last()">last </xsl:if>
            <xsl:if test="$sub">has-sub</xsl:if>
         </xsl:attribute>
         
         <!-- Определяем адрес ссылки -->
         <xsl:variable name="link">
            <xsl:choose>
               <!-- Если внутренняя ссылка -->
               <xsl:when test="link != ''">
                  <xsl:value-of disable-output-escaping="yes" select="link"/>
               </xsl:when>
               <!-- Если внешняя ссылка -->
               <xsl:otherwise>
                  <xsl:value-of disable-output-escaping="yes" select="url"/>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:variable>
         
         <!-- Показывать ссылку? -->
         <a href="{$link}">
            <span><xsl:value-of disable-output-escaping="yes" select="name"/></span>
         </a>
         
         <xsl:if test="$sub">
            <ul>
               <xsl:apply-templates select="$sub" />
            </ul>
         </xsl:if>
      </li>
   </xsl:template>
</xsl:stylesheet>
#
Re: Выпадающее меню продукции
jobtestuser писал(а):
мне необходимо вывести меню только для каталога

<?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('ЛевМеню')
      )
      ->groupsMode('tree') // Режим показа групп, может принимать следующие значения: none — не показывать группы, tree — показывать дерево групп и все группы на текущем уровне (по умолчанию), all — показывать все группы.
      ->limit(0)
      ->viewed(FALSE)
      ->favorite(FALSE)
      ->comparing(FALSE)
      ->calculateTotal(FALSE)
      ->show();
}

В XML попадают shop_group
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Выпадающее меню продукции
Спасибо
#
Присвоить элементу <a> атрибут class="active"
Помогите разобраться!
Не могу могу понять - почему не получается, уже всю голову "сломал".
Как текущему элементу a (группе магазина) присвоить атрибут class="active"?

XSL-шаблон:
<?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="/shop">
<h5 class="font-family-narrow text-uppercase">Мебель</h5>
<menu class="leftmenu"><xsl:apply-templates select="shop_group" /></menu>
</xsl:template>

<!-- Шаблон для групп товара -->
<xsl:template match="shop_group">
<a href="{url}">
<xsl:if test="*[@id][show=1][active=1] and $current_structure_id = @id or .//structure[@id=$current_structure_id]">
<xsl:attribute name="class">active</xsl:attribute>
</xsl:if>
<xsl:value-of select="name" />
<span class="text-muted"><xsl:value-of disable-output-escaping="yes" select="items_count" /></span>
</a>
</xsl:template>

</xsl:stylesheet>

Выводится вот такое:
<h5 class="font-family-narrow text-uppercase">Мебель</h5>
<menu class="leftmenu">
  <a href="/mebel/shkafy/">Шкафы<span class="text-muted">31</span></a>
  <a href="/mebel/spalni/">Спальни<span class="text-muted">4</span></a>
  <a href="/mebel/detskaya/">Детские<span class="text-muted">4</span></a>
  <a href="/mebel/stoly/">Столы<span class="text-muted">3</span></a>
</menu>
#
Re: Выпадающее меню продукции
Dmitry K.,
Показ группы магазина на уровне Структуры сайта?
$Structure_Controller_Show->showShopGroups(TRUE)

Если да то проверяйте и добавляйте ID группы в XML
if (is_object(Core_Page::instance()->object) &&
        (get_class(Core_Page::instance()->object) == 'Shop_Controller_Show')
    {
        $Structure_Controller_Show->addEntity(
            Core::factory('Core_Xml_Entity')
                ->name('current_group_id')
                ->value(Core_Page::instance()->object->group)
        );
    }

Далее проверяйте в XSL
<a href="{url}">
            <xsl:if test="@id = /site/current_group_id">
               <xsl:attribute name="class">active</xsl:attribute>
            </xsl:if>
            <xsl:value-of select="name"/>
         </a>
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Выпадающее меню продукции
Seri,
не пойму что не так! В ТДС ругается на строку, выделенную жирным шрифтом:
Замечание: Undefined variable: Structure_Controller_Show в файле /home/users/k/kamardindg/domains/detskaya-mebel.com/hostcmsfiles/lib/lib_269/lib_269.php (строка 16)Exception: Call to a member function showShopGroups() on null
<?php if (Core::moduleIsActive('shop')) {
   $shopId = Core_Array::get(Core_Page::instance()->widgetParams, 'shopId');
   $xsl = Core_Array::get(Core_Page::instance()->widgetParams, 'xsl');
   $Shop_Controller_Show = new Shop_Controller_Show(Core_Entity::factory('Shop', $shopId));
   if (is_object(Core_Page::instance()->object) && get_class(Core_Page::instance()->object) == 'Shop_Controller_Show') {
      $Structure_Controller_Show
         ->addEntity(Core::factory('Core_Xml_Entity')
                           ->name('current_group_id')
                           ->value(Core_Page::instance()->object->group));
                           //->value(intval(Core_Page::instance()->object->group)));
      }
   $Structure_Controller_Show
      ->showShopGroups(true)
      ->show();
}

#
Re: Выпадающее меню продукции
Dmitry K.,
объявляете переменную  $Shop_Controller_Show, а используете $Structure_Controller_Show
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Присвоить элементу <a> атрибут class="active"
Так может, всё-таки кто-нибудь поможет? Что здесь не так?
Надо к текущему элементу a (это группа магазина) присвоить атрибут class="active"?
То есть когда я нахожусь, к примеру, в Спальни, то у меня выдавалось не это:
<h5 class="font-family-narrow text-uppercase">Мебель</h5>
<menu class="leftmenu">
  <a href="/mebel/shkafy/">Шкафы<span class="text-muted">31</span></a>
  <a href="/mebel/spalni/">Спальни<span class="text-muted">4</span></a>
  <a href="/mebel/detskaya/">Детские<span class="text-muted">4</span></a>
  <a href="/mebel/stoly/">Столы<span class="text-muted">3</span></a>
</menu>

а вот это:
<h5 class="font-family-narrow text-uppercase">Мебель</h5>
<menu class="leftmenu">
  <a href="/mebel/shkafy/">Шкафы<span class="text-muted">31</span></a>
  <a href="/mebel/spalni/" class="active">Спальни<span class="text-muted">4</span></a>
  <a href="/mebel/detskaya/">Детские<span class="text-muted">4</span></a>
  <a href="/mebel/stoly/">Столы<span class="text-muted">3</span></a>
</menu>

ТДС
<?php if (Core::moduleIsActive('shop')) {
   $shopId = Core_Array::get(Core_Page::instance()->widgetParams, 'shopId');
   $xsl = Core_Array::get(Core_Page::instance()->widgetParams, 'xsl');
   $Shop_Controller_Show = new Shop_Controller_Show(Core_Entity::factory('Shop', $shopId));
   
   if (is_object(Core_Page::instance()->object) && get_class(Core_Page::instance()->object) == 'Shop_Controller_Show') {
      $Structure_Controller_Show
         ->addEntity(Core::factory('Core_Xml_Entity')
                           ->name('current_group_id')
                           ->value(Core_Page::instance()->object->group));
      }
   
   $Shop_Controller_Show
      ->xsl(Core_Entity::factory('Xsl')->getByName($xsl))
      ->groupsMode('all')
      ->limit(0)
      ->viewed(false)
      ->favorite(false)
      ->comparing(false)
      ->calculateTotal(false)
      ->show();
   
   $Structure_Controller_Show
      ->showShopGroups(true)
      ->show();
   }

XSL
<?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="/shop">
<h5 class="font-family-narrow text-uppercase">Мебель</h5>
<menu class="leftmenu"><xsl:apply-templates select="shop_group" /></menu>
</xsl:template>

<!-- Шаблон для групп товара -->
<xsl:template match="shop_group">
<a href="{url}">
<xsl:if test="@id = /site/current_group_id">
<xsl:attribute name="class">active</xsl:attribute>
</xsl:if>
<xsl:value-of select="name" />
<span class="text-muted"><xsl:value-of disable-output-escaping="yes" select="items_count" /></span>
</a>
</xsl:template>

</xsl:stylesheet>

Может я что-то лишнее пишу...
В какой строчке и что конкретно поменять?
#
Присвоить элементу <a> атрибут class="active"
А кстати, если выдаёт вот такую приписку:
{"site":{"_id":null,"name":null,"active":null,"coding":null,"sorting":null,"locale":null,"timezone":null,"max_size_load_image":null,
"max_size_load_image_big":null,"admin_email":null,"error_email":null,"lng":null,"send_attendance_report":null,"chmod":null,
"files_chmod":null,"date_format":null,"date_time_format":null,"parent_id":0,"current_structure_id":"316"}}

Что это значит?
#
Присвоить элементу <a> атрибут class="active"
Кстати, Цитата:
"current_structure_id":"316"
- выдаёт правильно, но корневую текущую структуру Мебель, а мне нужна дочерняя (на порядок ниже) - Спальни, например, чтобы выдавало.
Авторизация