Подсветка активного пункта в меню магазина

#
Re: Подсветка активного пункта в меню магазина
Вот это я тупанул!! Спасибо огромное Вам Александр, все работает!

В макет вставил следующий код:

<?php
// Разделы магазина
      if (Core::moduleIsActive('shop'))
      {
         $Shop_Controller_Show = new Shop_Controller_Show(
            Core_Entity::factory('Shop', 1)
         );


if (is_object(Core_Page::instance()->object)
&& get_class(Core_Page::instance()->object) == 'Shop_Controller_Show')
{
    $Shop_Controller_Show->addEntity(
       Core::factory('Core_Xml_Entity')
          ->name('current_group_id')
          ->value(intval(Core_Page::instance()->object->group))
    );
}

         $Shop_Controller_Show
            ->xsl(
               Core_Entity::factory('Xsl')->getByName('МагазинГруппыТоваровНаГлавной')
            )
            
            //->itemsForbiddenTags(array('text'))
            ->group(0)
                                ->groupsMode('all')
            ->limit(0)
            ->show();
      }
?>


Только подскажите еще вот по такому моменту, как сохранять class=active с учетом вложенности категории? Тоесть когда я сижу в родительской - класс подставляется, но если двигаюсь дальше и перехожу в дочернюю - класс теряется
#
Re: Подсветка активного пункта в меню магазина
Так как быть с вложенностью? чтобы active сохранялся у родительской категории при переходе в дочернюю
#
Re: Подсветка активного пункта в меню магазина
И правда интересный вопрос. Тоже интересует данный момент, т.к. это бывает необходимо.
#
Re: Подсветка активного пункта в меню магазина
Все просто:

   <xsl:template match="shop_group">
      <xsl:variable name="current_group_id" select="/shop/current_group_id"/>
      <li>
         <xsl:if test="$current_group_id = @id or count(.//shop_group[@id=$current_group_id])=1">
            <xsl:attribute name="class">
               <xsl:text>active</xsl:text>
            </xsl:attribute>
         </xsl:if>

         <!-- Определяем адрес ссылки -->
         <xsl:variable name="link">
            <xsl:choose>
               <!-- Если внешняя ссылка -->
               <xsl:when test="url != ''">
                  <xsl:value-of disable-output-escaping="yes" select="url"/>
               </xsl:when>
               <!-- Иначе если внутренняя ссылка -->
               <xsl:otherwise>
                  <xsl:value-of disable-output-escaping="yes" select="link"/>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:variable>
         
         <!-- Ссылка на пункт меню -->
         <a href="{$link}" title="{name}">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </a>
         <xsl:if test="$current_group_id = @id or count(.//shop_group[@id=$current_group_id])=1">
            <ul class="submenu">
               <xsl:apply-templates select="shop_group[active=1]"/>
            </ul>
         </xsl:if>
      </li>
   </xsl:template>
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Подсветка активного пункта в меню магазина
А вот для меня оказалось не всё просто!
Подскажите, пожалуйста, кто-нибудь: мне необходимо написать XSL-шаблон меню интернет-магазинов. То есть в структуре сайта есть, к примеру, 3 интернет-магазина: «Кухни», «Двери», «Лестницы». У каждой структуры (пункта меню) свой интернет-магазин. Как написа́ть XSL-шаблон для меню, чтобы в меню отображались товары именно своего интернет-магазина.
Фрагмент макета сайта приведён ниже:
<?php if (Core::moduleIsActive('shop')) { $Shop_Controller_Show = new Shop_Controller_Show(Core_Entity::factory('Shop', Core_Page::instance()->libParams['shopId']));
if (is_object(Core_Page::instance()->object) && get_class(Core_Page::instance()->object) == 'Shop_Controller_Show') {
$Shop_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')
->name('current_group_id')
->value(intval(Core_Page::instance()
->object->group))); }
$Shop_Controller_Show
->xsl(Core_Entity::factory('Xsl')
->getByName('МенюТовары'))
->groupsMode('all')
->group(0)
->limit(0)
->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_group">
<xsl:variable name="current_group_id" select="/shop/current_group_id"/>
<xsl:if test="$current_group_id = @id or count(.//shop_group[@id=$current_group_id])=1">
<xsl:attribute name="class">
<xsl:text>tek</xsl:text>
</xsl:attribute>
</xsl:if>
<!-- Определяем адрес ссылки -->
<xsl:variable name="link"><xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="url != ''"><xsl:value-of disable-output-escaping="yes" select="url"/></xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise><xsl:value-of disable-output-escaping="yes" select="link"/></xsl:otherwise>
</xsl:choose></xsl:variable>
<!-- Ссылка на пункт меню -->
<a href="{$link}" title="{name}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
<xsl:if test="$current_group_id = @id or count(.//shop_group[@id=$current_group_id])=1">
<xsl:apply-templates select="shop_group[active=1]"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>


Заранее спасибо!
#
Re: Re: Подсветка активного пункта в меню магазина
kamardindg
Если я вас правильно понял вам просто нужно в макете где вставляете код вывода, для разных магазинов указывать свой id вместо shopId например 1, как впримере ниже. А xsl шаблон может быть одинаковым.

      <?php   
// Разделы магазина
      if (Core::moduleIsActive('shop'))
      {
         $Shop_Controller_Show = new Shop_Controller_Show(
            Core_Entity::factory('Shop', 1)
         );
         $Current_Shop_Controller = Core_Page::instance()->object; // текущий объект данных

         $Shop_Controller_Show
            ->xsl(
               Core_Entity::factory('Xsl')->getByName('МагазинГруппыТоваровНаГлавной')
            )

            ->groupsMode('all') // включите вывод всех групп
            //->itemsForbiddenTags(array('text'))
            ->group(0)
            ->limit(0)
            ->show();
      }
                  ?>
Авторизация