Активные пункты меню интернет-магазина

#
Активные пункты меню интернет-магазина
Дайте, пожалуйста, кто-нибудь, код для выделения активных пунктов меню интернет-магазина. Только не посылайте, пожалуйста в поиск или еще куда подальше, лучше вообще тогда не отвечайте. Я устал уже читать форум.
PS: Можно было бы это заложить изначально в XSL-шаблоне, как для меню структуры и инфосистемы.
www.dsaleks.ru - создание сайтов и интернет-магазинов
#
Re: Активные пункты меню интернет-магазина
код вызова меню с передачей ID узла:
<?php
$structure = new Structure();
$param = array();
$external_propertys = array();

   $InformationSystem = & singleton('InformationSystem');
   $InformationSystem_id = $InformationSystem->GetInformationSystemByStructureId(CURRENT_STRUCTURE_ID);
   if ($InformationSystem_id)
   {
      $result = $InformationSystem->GetInformationFromPath($InformationSystem_id, '', false);
      if ($result['item'])
      {
         $item_id = $InformationSystem->GetIdInformationItem($result['item'], $result['group'], $InformationSystem_id);
         if ($item_id != 0)
         {
            $external_propertys['item'] = $item_id;
            $param['show_groups'] = true;
            $param['show_items'] = array($item_id);
         }
      }
      else
      {
         $item_id = false;
      }
   
      if (is_array($result) && $result['group'] > 0)
      {
         $external_propertys['group'] = $result['group'];
         $param['show_groups'] = true;
      }
      $param['show_information_systems'][] = $InformationSystem_id;
   }
   elseif (class_exists('shop'))
   {
      $shop = & singleton('shop');
      $shop_row = $shop->GetShopWhithStructureId(CURRENT_STRUCTURE_ID, CURRENT_SITE);
      if ($shop_row)
      {
         $result = $shop->GetItemPath($shop_row['shop_shops_id'], '', false);
         if ($result['item'])
         {
            $item_id = $result['item'];
            if ($item_id != 0)
            {
               $external_propertys['item'] = $item_id;
               $param['show_shop_groups'] = true;
               $param['show_shop_items'] = array($item_id);
            }
         }
         else
         {
            $item_id = false;
         }
         if (is_array($result) && $result['group'] > 0)
         {
            $external_propertys['group'] = $result['group'];
            $param['show_shop_groups'] = true;
         }
      }
   }
$structure->ShowStructure(3, 'ВерхнееМеню', $param, $external_propertys);
?>


в шаблоне меню нужно заменить
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
на
<xsl:variable name="current_structure_id">
<xsl:choose>
<xsl:when test="/document/item/node()">item_<xsl:value-of select="/document/item"/></xsl:when>
<xsl:when test="/document/group/node()">group_<xsl:value-of select="/document/group"/></xsl:when>
<xsl:otherwise><xsl:value-of select="/document/structure/current_structure_id"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>

во всех проверках "if test=current_structure_id = @id" заменить
current_structure_id
на
$current_structure_id
#
Re: Активные пункты меню интернет-магазина
Так вообще не выводятся пункты магазина.
Для вывода групп магазина я использовал вызов меню как в демоверсии:
// Разделы каталога товаров
$shop = & singleton('shop');
$shop_id = 1;

$param = array();
$param['items_on_page'] = 2;
$param['xml_show_group_type'] = 'all';

$shop->ShowShop($shop_id, 'МагазинГруппыТоваровНаГлавной', $param);

В шаблоне добавил выпадающие пункты. Все работает, кроме выделения активного пункта.
www.dsaleks.ru - создание сайтов и интернет-магазинов
#
Re: Активные пункты меню интернет-магазина
Хотя, выводятся, я отключил вывод магазина в меню, у меня выводились только разделы. Теперь выводится сам магазин, корень раздела. А как вывести не сам магазин, а разделы внутри него?
Все-таки, может в XSL-шаблоне "МагазинГруппыТоваровНаГлавной" удастся это сделать?
Я его вот так сделал:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" 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">
      <xsl:apply-templates select="group"/>
   </xsl:template>

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

      <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
      <xsl:variable name="parent_group_id" select="/shop/@current_group_id"/>

         <!-- Определяем стиль вывода ссылки -->
         <xsl:variable name="link_class">
            <xsl:choose>
               <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
               <xsl:when test="$parent_group_id=@id or count(/shop//group[@id=$parent_group_id])=1">_active</xsl:when>
               <!-- Иначе обычный вывод с пустым стилем -->
               <xsl:otherwise></xsl:otherwise>
            </xsl:choose>
         </xsl:variable>

      <td>
         <div class="item_menu_div{$link_class}" id="menu_id_{@id}" onmouseover="TopMenuOver('menu_id_{@id}', 'child_menu_id_{@id}');" onmouseout="TopMenuOut('menu_id_{@id}', 'child_menu_id_{@id}');">
                <xsl:choose>
                   <xsl:when test="propertys/property[@xml_name = 'name_link_menu']/value !='' ">
                  <a href="{/shop/path}{fullpath}">
                     <xsl:value-of disable-output-escaping="yes" select="propertys/property[@xml_name = 'name_link_menu']/value"/>
                  </a>
               </xsl:when>
               <xsl:otherwise>
                  <a href="{/shop/path}{fullpath}">
                     <xsl:value-of disable-output-escaping="yes" select="name"/>
                  </a>
                   </xsl:otherwise>
                </xsl:choose>

            <!-- Если есть подгруппы -->
            <xsl:if test="group">
               <div id="child_menu_id_{@id}" class="poll_down_menu_lev_1">
                  <xsl:apply-templates select="group" mode="pool" />
               </div>
            </xsl:if>
         </div>
      </td>

   </xsl:template>

   <xsl:template match="group" mode="pool">
      <div style="text-align:left">
         <a href="{/shop/path}{fullpath}">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </a>
      </div>
   </xsl:template>

</xsl:stylesheet>

Где тут ошибка?
www.dsaleks.ru - создание сайтов и интернет-магазинов
#
Re: Активные пункты меню интернет-магазина
если нужен только магазин используется вызов, как был у вас

добавьте перед ShowShop

$rez = array();
$rez = $shop->GetItemPath($shop_id);
$external_propertys = array();
$external_propertys['thisgroup'] = $rez['group'];

и в самом вызове
$shop->ShowShop($shop_id, 'МагазинГруппыТоваровНаГлавной', $param, $external_propertys);


в xsl можно так проверять:
<xsl:choose>
<xsl:when test="/shop/thisgroup = @id"><b>Текущая группа</b></xsl:when>
<xsl:otherwise>Обычная группа</xsl:otherwise>
</xsl:choose>
#
Re: Активные пункты меню интернет-магазина
Объединяя все вместе, можно так:
вызов:
// Разделы каталога товаров
$shop = & singleton('shop');
$shop_id = 1;

$param = array();
$param['items_on_page'] = 2;
$param['xml_show_group_type'] = 'all';
$rez = array();
$rez = $shop->GetItemPath($shop_id);
$external_propertys = array();
$external_propertys['thisgroup'] = $rez['group'];
$shop->ShowShop($shop_id, 'МагазинГруппыТоваровНаГлавной', $param, $external_propertys);


Шаблон:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" 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">
      <xsl:apply-templates select="group"/>
   </xsl:template>

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

      <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
      <xsl:variable name="parent_group_id" select="/shop/thisgroup"/>

         <!-- Определяем стиль вывода ссылки -->
         <xsl:variable name="link_class">
            <xsl:choose>
               <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
               <xsl:when test="$parent_group_id=@id or count(/shop//group[@id=$parent_group_id])=1">_active</xsl:when>
               <!-- Иначе обычный вывод с пустым стилем -->
               <xsl:otherwise></xsl:otherwise>
            </xsl:choose>
         </xsl:variable>

      <td>
         <div class="item_menu_div{$link_class}" id="menu_id_{@id}" onmouseover="TopMenuOver('menu_id_{@id}', 'child_menu_id_{@id}');" onmouseout="TopMenuOut('menu_id_{@id}', 'child_menu_id_{@id}');">
                <xsl:choose>
                   <xsl:when test="propertys/property[@xml_name = 'name_link_menu']/value !='' ">
                  <a href="{/shop/path}{fullpath}"><xsl:if test="$parent_group_id=@id or count(/shop//group[@id=$parent_group_id])=1"><xsl:attribute name="style">font-weight:bold;</xsl:attribute></xsl:if>
                     <xsl:value-of disable-output-escaping="yes" select="propertys/property[@xml_name = 'name_link_menu']/value"/>
                  </a>
               </xsl:when>
               <xsl:otherwise>
                  <a href="{/shop/path}{fullpath}"><xsl:if test="$parent_group_id=@id or count(/shop//group[@id=$parent_group_id])=1"><xsl:attribute name="style">font-weight:bold;</xsl:attribute></xsl:if>
                     <xsl:value-of disable-output-escaping="yes" select="name"/>
                  </a>
                   </xsl:otherwise>
                </xsl:choose>

            <!-- Если есть подгруппы -->
            <xsl:if test="group">
               <div id="child_menu_id_{@id}" class="poll_down_menu_lev_1">
                  <xsl:apply-templates select="group" mode="pool" />
               </div>
            </xsl:if>
         </div>
      </td>

   </xsl:template>

   <xsl:template match="group" mode="pool">
      <div style="text-align:left">
         <a href="{/shop/path}{fullpath}"><xsl:if test="/shop/thisgroup=@id"><xsl:attribute name="style">font-weight:bold;</xsl:attribute></xsl:if>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </a>
      </div>
   </xsl:template>

</xsl:stylesheet>
#
Re: Активные пункты меню интернет-магазина
Так все группы магазина получаются активными, когда в него входишь. Где-то тут еще есть ошибка, и она конечно же моя.
www.dsaleks.ru - создание сайтов и интернет-магазинов
#
Re: Активные пункты меню интернет-магазина
У меня вот так получилось, работает как надо:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" 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">
      <xsl:apply-templates select="group"/>
   </xsl:template>

   <!-- Шаблон для групп товара -->
   <xsl:template match="group">
      <td>
         <xsl:variable name="link_class">
            <xsl:choose>
               <xsl:when test="/shop/thisgroup = @id">_active</xsl:when>
               <xsl:otherwise></xsl:otherwise>
            </xsl:choose>
         </xsl:variable>

         <div class="item_menu_div{$link_class}" id="menu_id_{@id}" onmouseover="TopMenuOver('menu_id_{@id}', 'child_menu_id_{@id}');" onmouseout="TopMenuOut('menu_id_{@id}', 'child_menu_id_{@id}');">
                <xsl:choose>
                   <xsl:when test="propertys/property[@xml_name = 'name_link_menu']/value !='' ">
                  <a href="{/shop/path}{fullpath}">
                     <xsl:value-of disable-output-escaping="yes" select="propertys/property[@xml_name = 'name_link_menu']/value"/>
                  </a>
               </xsl:when>
               <xsl:otherwise>
                  <a href="{/shop/path}{fullpath}">
                     <xsl:value-of disable-output-escaping="yes" select="name"/>
                  </a>
                   </xsl:otherwise>
                </xsl:choose>
            <!-- Если есть подгруппы -->
            <xsl:if test="group">
               <div id="child_menu_id_{@id}" class="poll_down_menu_lev_1">
                  <xsl:apply-templates select="group" mode="pool" />
               </div>
            </xsl:if>
         </div>
      </td>
   </xsl:template>

   <xsl:template match="group" mode="pool">
      <div style="text-align:left">
         <a href="{/shop/path}{fullpath}">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </a>
      </div>
   </xsl:template>

</xsl:stylesheet>

Спасибо за помощь!!!
www.dsaleks.ru - создание сайтов и интернет-магазинов
#
Re: Активные пункты меню интернет-магазина
День добрый! Подскажите пожалуйста, установил систему на локальную машину. Стоит денвер 3. PHP 5.2. Все зарегестрировал. Проверяю корзину, добавляется тока по одному товару, заменяется другим, и когда перехожу в саму корзину - пишет пуста.  В чем может быть дело ?
Авторизация