Древовидный вывод груп товаров
slider Можно ли организовать вывод категорий товаров интернет магазина в отдельный блок в виде дерева.
Если да, то как? Думаю это было бы интересно многим пользователям.
Суть данного метода в организации каталога на базе интернет магазина с более нагрядной навигацией.
Делаю мэйк-ап сайтов Профиль |
Сообщений: 56 |
Дата создания: 15.09.2007 21:47:02Re: Древовидный вывод груп товаров
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> <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:43Re: Древовидный вывод груп товаров
slider Спасибо за ответ, но я наверное не совсем верно выразился.
Хочу сделать вывод групп товаров в виде отдельного меню в шаблоне страницы. Тоесть сделать отдельное меню для навигации по группам и подгруппам товаров магазина.
например как здесь у меня организовано левое меню http://sliderweb.ru/explore/smsend/. точно так же хочу организовать и вывод групп магазинов в отдельном блоке шаблона.
Заранее спасибо.
Делаю мэйк-ап сайтов Профиль |
Сообщений: 56 |
Дата создания: 23.09.2007 21:46:04Re: Древовидный вывод груп товаров
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> <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:54Re: Древовидный вывод груп товаров
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> <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:48Re: Древовидный вывод груп товаров
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> <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:04Re: Древовидный вывод груп товаров
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:58Re: Древовидный вывод груп товаров
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> <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> <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:49Re: Древовидный вывод груп товаров
h4mpy а как сделать проверку на количество подгрупп?
Группа1
Группа2
Подгруппа1
Подгруппа2
Подгруппа N
Группа3
Если мы переходим в подгруппу 2 и у нее нет подгрупп под ней просто появляется пустой <ul></ul>
как сделать вывод подгрупп только в случае если они есть? Профиль |
Сообщений: 725 |
Дата создания: 19.11.2007 16:11:59Re: Древовидный вывод груп товаров
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