HostCMS
Выдано 65 986 лицензий.
На главную страницу Карта сайта

Древовидный вывод груп товаров

Список форумовОбщие вопросы по системе управления сайтом HostCMS

Древовидный вывод груп товаров
slider

Можно ли организовать вывод категорий товаров интернет магазина в отдельный блок в виде дерева.
Если да, то как? Думаю это было бы интересно многим пользователям.
Суть данного метода в организации каталога на базе интернет магазина с более нагрядной навигацией.

Делаю мэйк-ап сайтов
Профиль | Сообщений: 56 | Дата создания: 15.09.2007 21:47:02
Re: Древовидный вывод груп товаров
natalya

Регистрация: 30.11.1999
В XSL-шаблоне, занимающемся отображением списка категорий интернет-магазина, можно исправить вызов тэмплейта для групп магазина следующим образом:

<!-- Выводим группы магазина -->
<ul>
   <xsl:apply-templates select="//group[@parent=0]"/>         
</ul>


А сам тэмплейт отображения групп и всех их подгрупп должен быть, например, таким:

<!-- Шаблон для групп товара -->
<xsl:template match="group">
   <li>
      <xsl:if test="small_image != ''">
         <img src="{small_image}" align="left" style="border: 1px solid #000000; float: left" />
      </xsl:if>
      <a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>&#160;<span style="color: #aaaaaa">(<xsl:value-of disable-output-escaping="yes" select="count_all_items"/> )</span>
      <br/>
      <xsl:value-of disable-output-escaping="yes" select="description"/>
   </li>
      <ul>   
         <xsl:apply-templates select="group"/>
                </ul>
</xsl:template>
Профиль | Сообщений: 2634 | Дата создания: 17.09.2007 17:24:43
Re: Древовидный вывод груп товаров
slider

Спасибо за ответ, но я наверное не совсем верно выразился.
Хочу сделать вывод групп товаров в виде отдельного меню в шаблоне страницы. Тоесть сделать отдельное меню для навигации по группам и подгруппам товаров магазина.

например как здесь у меня организовано левое меню http://sliderweb.ru/explore/smsend/. точно так же хочу организовать и вывод групп магазинов в отдельном блоке шаблона.

Заранее спасибо.

Делаю мэйк-ап сайтов
Профиль | Сообщений: 56 | Дата создания: 23.09.2007 21:46:04
Re: Древовидный вывод груп товаров
natalya

Регистрация: 30.11.1999
Создайте новый XSL-шаблон на базе шаблона «МагазинКаталогТовара». Назовите его, например, „МагазинКаталогТоваровГруппы“. Уберите из него все лишнее (т.е. показ блока сравнения товаров, фильтра, сортировки товаров и списка товаров — удаляйте все это внимательно и следите, чтобы не возникли ошибки при преобразовании). Оставьте только вызов тэмплейта:

   <xsl:variable name="parent_group_id" select="@current_group_id"/>
   <!-- Выводим группы магазина -->
        <ul>
               <xsl:apply-templates select="//group[@parent=0]"/>        
        </ul>


и сам тэмплейт:

<!-- Шаблон для групп товара -->
<xsl:template match="group">
   <li>
      <xsl:if test="small_image != ''">
         <img src="{small_image}" align="left" style="border: 1px solid #000000; float: left" />
      </xsl:if>
      <a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>&#160;<span style="color: #aaaaaa">(<xsl:value-of disable-output-escaping="yes" select="count_all_items"/> )</span>
      <br/>
      <xsl:value-of disable-output-escaping="yes" select="description"/>
   </li>
      <ul>  
         <xsl:apply-templates select="group"/>
                </ul>
</xsl:template>


А в отдельном блоке шаблона страницы (или в макете) для вывода групп и их подгрупп добавьте блок:

<?
     $shop = new shop();
   $shop->ShowShop(1,'МагазинКаталогТоваровГруппы');
  ?>
Профиль | Сообщений: 2634 | Дата создания: 24.09.2007 09:52:54
Re: Древовидный вывод груп товаров
slider

Либо я чего-то не понимаю, либо где-то закралась ошибка…
Сдклал как вы и написали, но у меня в итоге ПУСТО. Ошибок не выдает.
Вот XSL-код

<!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:variable name="parent_group_id" select="@current_group_id"/>
   <!-- Выводим группы магазина -->
        <ul>
               <xsl:apply-templates select="//group[@parent=0]"/>        
        </ul>
   <!-- Шаблон для групп товара -->
<xsl:template match="group">
   <li>
      <xsl:if test="small_image != ''">
         <img src="{small_image}" align="left" style="border: 1px solid #000000; float: left" />
      </xsl:if>
      <a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>&#160;<span style="color: #aaaaaa">(<xsl:value-of disable-output-escaping="yes" select="count_all_items"/> )</span>
      <br/>
      <xsl:value-of disable-output-escaping="yes" select="description"/>
   </li>
      <ul>  
         <xsl:apply-templates select="group"/>
                </ul>
</xsl:template>
</xsl:stylesheet>

Делаю мэйк-ап сайтов
Профиль | Сообщений: 56 | Дата создания: 07.10.2007 05:07:48
Re: Древовидный вывод груп товаров
natalya

Регистрация: 30.11.1999
Не выводит ничего потому, что у Вас грубейшая ошибка. Я Вам писала:

Создайте новый XSL-шаблон ... Уберите из него все лишнее

Но это же не означало убрать абсолютно все, нарушив при этом синтаксис XSL-шаблонов! У Вас блок:

<xsl:variable name="parent_group_id" select="@current_group_id"/>
   <!-- Выводим группы магазина -->
        <ul>
               <xsl:apply-templates select="//group[@parent=0]"/>        
        </ul>

вообще не является частью ни одного тэмплайта(шаблона т.е.). В 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">
   <li>
      <xsl:if test="small_image != ''">
         <img src="{small_image}" align="left" style="border: 1px solid #000000; float: left" />
      </xsl:if>
      <a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>&#160;<span style="color: #aaaaaa">(<xsl:value-of disable-output-escaping="yes" select="count_all_items"/> )</span>
      <br/>
      <xsl:value-of disable-output-escaping="yes" select="description"/>
   </li>
      <ul>  
         <xsl:apply-templates select="group"/>
                </ul>
</xsl:template>

</xsl:stylesheet>
Профиль | Сообщений: 2634 | Дата создания: 08.10.2007 08:48:04
Re: Древовидный вывод груп товаров
slider

Спасибо за ответ. Оченб помогли, теперь есть возможность переделать много менюшек… на базе подобных тем даже удалось немного разобраться в XSL.
Но у меня еще один вопрос. Не судите строго, я только учусь и поэтому еще нет полного понимания работы данной технологии.
Данным шаблоном рекруссивно выводятся ВСЕ группы и подгруппы товаров, но у меня каталог с множеством подгрупп и поэтому меню выглядит очень длинным и громоздким. Хотелось бы сделать раскрывющиеся подгруппы.
Пример.

Группа1
Группа2
Группа3

ппосле перехода в Группа2 получаем что-то похожее на Группа1
Группа2
Подгруппа1
Подгруппа2
Подгруппа N
Группа3

ппосле перехода в Подгруппа2 получаем что-то похожее на Группа1
Группа2
Подгруппа1
Подгруппа2
Подгруппа2-1
Подгруппа2-2
Подгруппа2-3
Подгруппа N
Группа3

ну и тому подобное…
Но не знаю как такое реализовать. На основе меню удалось сделать такое, благо на форуме есть подобный пример, а вот с магазином таку не выходит. Если кто делал нечто подобное — помогите новичку.

Делаю мэйк-ап сайтов
Профиль | Сообщений: 56 | Дата создания: 17.10.2007 13:10:58
Re: Древовидный вывод груп товаров
natalya

Регистрация: 30.11.1999
Для реализации подобного функцианала требуется модернизация 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:if test="small_image != ''">
      <img src="{small_image}" align="left" style="border: 1px solid #000000; float: left" />
         </xsl:if>
   <xsl:choose>   
           <xsl:when test="$current_group_id = @id or count(.//group[@id=$current_group_id])=1">
            <b><a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></b>&#160;<span style="color: #aaaaaa">(<xsl:value-of disable-output-escaping="yes" select="count_all_items"/> )</span>
            <br/>
            <ul>
                  <xsl:apply-templates select="group"/>
            </ul>
         </xsl:when>
         <xsl:otherwise>
            <a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>&#160;<span style="color: #aaaaaa">(<xsl:value-of disable-output-escaping="yes" select="count_all_items"/> )</span>
         </xsl:otherwise>
      </xsl:choose>
       
      <br/>
      
      <xsl:value-of disable-output-escaping="yes" select="description"/>
      
   </li>
      
</xsl:template>

</xsl:stylesheet>


Но главное, в макете (или шаблоне страницы), в коде вызова показа данной структуры необходимо передавать идентификатор текущей группы магазина следующим образом:
<?
   $shop = new shop();
   $ShopId = 3;
   $rez = array();
   $rez = $shop->GetItemPath($ShopId);
   $external_propertys = array();
   $external_propertys['ТекущаяГруппа'] = $rez['group'];
   $xsl_catalog = 'МагазинКаталогТоваровНаГлавной';
   $shop->ShowShop($ShopId, $xsl_catalog, array('current_group_id' => 0, 'items_on_page' => 0, 'xml_show_group_type' => 'all'), $external_propertys);
?>

Где в качестве значения $ShopId подставите идентификатор своего магазина и $xsl_catalog — имя XSL-шаблона(его код привиден выше)
Профиль | Сообщений: 2634 | Дата создания: 17.10.2007 13:48:49
Re: Древовидный вывод груп товаров
h4mpy

а как сделать проверку на количество подгрупп?

Группа1
Группа2
Подгруппа1
Подгруппа2
Подгруппа N
Группа3

Если мы переходим в подгруппу 2 и у нее нет подгрупп под ней просто появляется пустой <ul></ul>
как сделать вывод подгрупп только в случае если они есть?
Профиль | Сообщений: 725 | Дата создания: 19.11.2007 16:11:59
Re: Древовидный вывод груп товаров
natalya

Регистрация: 30.11.1999
Нужно добавить проверку на количесво всех подгрупп данной группы:
<xsl:if test="count_all_groups > 0">
<ul>
                  <xsl:apply-templates select="group"/>
</ul>
</xsl:if>
Профиль | Сообщений: 2634 | Дата создания: 19.11.2007 16:41:53

12345

Авторизация
Логин: Пароль:  

Список форумовОбщие вопросы по системе управления сайтом HostCMS

О нас говорят!

Пользуюсь HostCMS c 2010 года. Являюсь придирчивым к мелочам и, при этом, не перестаю радоваться такому же отношению к работе специалистов системы.

Студия и лаборатория Антона Арбузова
Фотограф
Арбузов Антон Сергеевич

Акции партнеров

Обработка прайс-листов поставщиков

Скидка 10% на программы обработки прайс-листов при покупке HostCMS в ElbuzGroup.

Скидка 10% при покупке программы для автоматизации обработки
прайс-листов поставщиков E-Trade PriceList Importer редакции Professional, при покупке любой редакции HostCMS в компании ElbuzGroup.

Рекомендуем хостинг

Hostyes

Тариф «HostCMS» за 140 руб./мес.

Создаете сайты?

У нас есть партнерское предложение по поставке системы управления сайтом:

О HostCMS
Редакции HostCMS
Возможности
Поддержка
Области применения
Партнерская программа
Заказать сайт