Древовидный вывод категорий магазина (делаем меню из категорий магазина)

#
Древовидный вывод категорий магазина (делаем меню из категорий магазина)
Вывод в шаблоне:

<?php
   $shop = new shop();
   $ShopId = 1;
   $rez = array();
   $rez = $shop->GetItemPath($ShopId);
   $external_propertys = array();
   $external_propertys['ТекущаяГруппа'] = $rez['group'];
   $param = array('current_group_id' => 0, 'items_on_page' => 10);
   $param['xml_show_group_type'] = 'all';
   $xsl_catalog = 'ЛевоеМеню';
   $shop->ShowShop($ShopId, $xsl_catalog, $param, $external_propertys);
?>

где $ShopId - это id вашего магазина
$xsl_catalog - xsl шаблон меню (ниже)
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:variable name="parent_group_id" select="@current_group_id"/>
<!-- Выводим группы магазина -->
      <ul>
      <xsl:apply-templates select="//group[@parent=0]"/>
      </ul>
</xsl:template>
<!-- Шаблон для групп товара -->
<xsl:template match="group">
<xsl:variable name="current_group_id" select="/shop/ТекущаяГруппа"/>
<li>
<xsl:choose>
<xsl:when test="$current_group_id = @id or count(.//group[@id=$current_group_id])=1">
<a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
<xsl:if test="count_all_groups > 0">
      <ul>
      <xsl:apply-templates select="group"/>
      </ul>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
</xsl:stylesheet>
Делаю сайты на HostCMS! Подробнее по почте anton.yurzanov@gmail.com
#
Re: Древовидный вывод категорий магазина (делаем меню из категорий магазина)
спасибо, как раз искал!
http://www.aiventa.ru
#
Re: Древовидный вывод категорий магазина (делаем меню из категорий магазина)
еще бы выделение жирным текущей категории добавить
http://www.aiventa.ru
Модератор
#
Re: Древовидный вывод категорий магазина (делаем меню из категорий магазина)
Вместо
<a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>

написать
<!-- Определяем стиль вывода ссылки -->
<xsl:variable name="link_style">
   <xsl:choose>
   <!-- Выделяем текущую страницу жирным (если это текущая страница) -->
   <xsl:when test="$current_group_id = @id">font-weight: bold</xsl:when>
   <!-- Иначе обычный вывод с пустым стилем -->
   <xsl:otherwise></xsl:otherwise>
   </xsl:choose>
</xsl:variable>


<a href="{/shop/path}{fullpath}" style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
#
Re: Древовидный вывод категорий магазина (делаем меню из категорий магазина)
А можно добавить сюда проверку на наличие товаров в выводимой группе? И ставить ссылку на группу только если в ней есть товары, иначе - просто название группы без ссылки?
http://superweb.pro/ — сайты на HostCMS под ключ
Модератор
#
Re: Древовидный вывод категорий магазина (делаем меню из категорий магазина)
plasmamedia,
В XML посмотрите, есть ли там количество товара в подгруппе и во всех подгруппах данной группы.
#
Re: Древовидный вывод категорий магазина (делаем меню из категорий магазина)
plasmamedia писал(а):
на наличие товаров в выводимой группе?
- количество товаров в группе содержится в тэге
<group...><count_items>
Можете добавить соответствующую проверку на значение содержимого этого тэга(больше нуля или нет). Например:
<!-- Шаблон для групп товара -->
<xsl:template match="group">
...
<xsl:choose>
<xsl:when test="count_items &gt; 0">
<a href="{/shop/path}{fullpath}" style="font-weight: bold">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
      </a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:otherwise>
</xsl:choose>
...
#
Re: Древовидный вывод категорий магазина (делаем меню из категорий магазина)
Спасибо, получилось!
http://superweb.pro/ — сайты на HostCMS под ключ
#
Re: Древовидный вывод категорий магазина (делаем меню из категорий магазина)
Пожалуйста.
#
Re: Древовидный вывод категорий магазина (делаем меню из категорий магазина)
А как можно преобразовать данный шаблон, чтобы при клике на категории выпадал список подкатегорий, а переход в категорию не происходил. То есть, допустим находимся на главной странице, на которой в исходном сосоянии находится каталог товаров. После клика по категории каталога выпал список подкатегорий, но мы остались на главной странице, а не перешли в эту категорию. При повторном клике на эту категорию список подкатегорий снова должен свернуться.
Авторизация