Вывод категорий магазина в меню

#
Вывод категорий магазина в меню
В общем-то проблема такая, как вывести категории интернет-магазина в общем меню сайта? Нашла нечто похожее, но для было написано, что для магазина не реализовано пока, однако это был апрель, может уже как-то можно?
Сейчас я реализую это так
В макете
<?php
$Structure = & singleton('Structure');
$param = array();
$param['show_groups']=true;
$param['show_items']=false;
$Structure->ShowStructure(1,'ЛевоеМеню', $param);
?>

В сам шаблон добавляем
<xsl:if test="count(structure[show=1]) &gt; 0">
   <xsl:apply-templates select="structure[show=1]" mode="child_nodes"/>
</xsl:if>

и
   <xsl:template match="structure" mode="child_nodes">
      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      <xsl:if test="show_link=1">
         <!-- Определяем адрес ссылки -->
         <xsl:variable name="link"><xsl:choose>
               <!-- Если внешняя ссылка -->
               <xsl:when test="is_external_link=1"><xsl:value-of disable-output-escaping="yes" select="external_link"/></xsl:when>
               <!-- Иначе если внутренняя ссылка -->
               <xsl:otherwise><xsl:value-of disable-output-escaping="yes" select="link"/></xsl:otherwise>
         </xsl:choose>
            </xsl:variable>
         <xsl:choose>
            <!-- Выделяем текущую страницу (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
            <xsl:when test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
   <tr><td style="padding-left: 15px; font-weight:bold;"><p><a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></p></td></tr>
            </xsl:when>
            <!-- Иначе обычный вывод с пустым стилем -->
            <xsl:otherwise>
   <tr><td style="padding-left: 15px;"><p><a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></p></td></tr>
            </xsl:otherwise>
         </xsl:choose>
      </xsl:if>
      
      <!-- Если не показывать ссылку - выводим просто имя ссылки -->
      <xsl:if test="show_link=0">
         <xsl:value-of disable-output-escaping="yes" select="name"/><br />
      </xsl:if>
   </xsl:template>


Но так не работает ((
http://www.colibre.ru - Создание и продвижение сайтов
Модератор
#
Re: Вывод категорий магазина в меню
Посмотрите XSL-шаблон от карты сайта и динамическую страницу карты сайта - карта сайта это фактически самое полное меню, в ней выводятся и группы и товары магазина, если установить соответствующие параметры на вывод (см. дин. страницу)
#
Re: Вывод категорий магазина в меню
libertine, см. описание метода ShowStructure
в API. В частности, принимаемые параметры метода:
$param['show_shop_groups'] - отображать ли группы товаров, по умолчанию false
$param['show_shop_items'] - отображать ли товары, может принимать значение true, false или массив идентификаторов товаров, подлежащих отображению. По умолчанию false
$param['show_shops'] - массив идентификаторов магазинов, подлежащих отображению
$param['do_not_show_shops'] - массив идентификаторов магазинов, исключаемых из отображения

#
Re: Вывод категорий магазина в меню
Спасибо, отображать получилось, теперь проблема с проверкой на активность. Как проверить является ли текущей какая либо группа магазина? Условие
current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1
ничего не дает
http://www.colibre.ru - Создание и продвижение сайтов
#
Re: Вывод категорий магазина в меню
libertine, попробуйте в XML для структуры передавать идентификатор текущей группы. Например:
<?php
$Structure = & singleton('Structure');
$param = array();
$param['show_shop_groups']=true;
$param['show_shop_items']=false;
$external_propertys = array();
$external_propertys['ТекущаяГруппа'] = to_int($GLOBALS['shop_item_path']['group']);
$Structure->ShowStructure(1,'ЛевоеМеню', $param, $external_propertys);
?>

А в XSL-шаблоне вместо кода:
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>

используйте:
<xsl:variable name="current_structure_id"><xsl:choose>
<xsl:when test="/document/ТекущаяГруппа/node() and /document/ТекущаяГруппа != '0'">group_<xsl:value-of select="/document/ТекущаяГруппа"/></xsl:when>
<xsl:otherwise>
<xsl:value-of select="/document/structure/current_structure_id"/>
</xsl:otherwise>
</xsl:choose></xsl:variable>

А вместо:
<xsl:when test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">

используйте:
<xsl:when test="$current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
#
Re: Вывод категорий магазина в меню
У меня задача почти такая же, но возникает проблема, в меню не должно быть названия магазина, но если я ставлю не отображать в меню, соответственно и категорий не отображается. Если используешь $param['do_not_show_shops'] тоже самое. Не подскажите как можно сделать, что бы отображались только категории магазина.
Модератор
#
Re: Вывод категорий магазина в меню
medved-ltd,
Можно в XSL поставить прямое исключение конкретного узла, хотя подузлы его выводить. Или если у Вас в других XSL-ах меню не используется проверка на [show=1], то можно для узла отключить показ меню и проверку делать внутри template, а подузлы выбирать независимо от того, показывать текущий узел в меню или нет
#
Re: Вывод категорий магазина в меню
Спасибо, использовала первый способ
Модератор
#
Re: Вывод категорий магазина в меню
medved-ltd,
Пожалуйста
Авторизация