if test="item" или вывод товаров из подкатегорий категорий магазина
Примерный вид содержимого магазина:
Магазин
-категория
--товар0
--подкатегория
---подподкатегория
----подподкатегория
-----товар1
-----подподподкатегория
------товар2
------товар3
Список параметров для вывода:
Для вывода используется такой XSL шаблон:
Пока были товары в категориях — выводились они. Как только дописал парсер, который из прайсов поставщика забивает товары в соответствии с уровнем вложености (предварительно удалив лишнее содержимое каталога) и все товары стали размещаться в подкатегориях различного уровня вложености — данный шаблон начал выводить пустоту.
Пробовал сделать вывод по принципу (нашел в ), но получаю Undefined variable: shop_item_path (при попытке заменить на shop_item_path_suffix) получаю то же самое.
При использовании
Можете подсказать способ реализации вывода, ссылки на актуальную информацию или примеры работающего кода?
Магазин
-категория
--товар0
--подкатегория
---подподкатегория
----подподкатегория
-----товар1
-----подподподкатегория
------товар2
------товар3
Список параметров для вывода:
if (class_exists('shop'))
{
$shop = & singleton('shop');
$shop_id = '3';
$param = array();
// Товары выбираем из всех групп
$param['current_group_id'] = false;
$param['xml_show_group_type'] = 'all';
// Выводим по 4 товара в блока
$param['items_on_page'] = 8;
// Используем случайный вывод товара
$param['items_order'] = 'rand';
// Получаем все скидки магазина
$AllDiscount = $shop->GetAllDiscounts($shop_id);
// Скидки есть
if ($AllDiscount)
{
$param['select_discount'] = array();
// Цикл по полученным скидкам
while ($row = mysql_fetch_assoc($AllDiscount))
{
// В массив добавляем идентификаторы скидок
$param['select_discount'][] = $row['shop_discount_id'];
}
}
$shop->ShowShop($shop_id, 'МагазинКаталогТоваровНаГлавнойHPRU', $param);
}
{
$shop = & singleton('shop');
$shop_id = '3';
$param = array();
// Товары выбираем из всех групп
$param['current_group_id'] = false;
$param['xml_show_group_type'] = 'all';
// Выводим по 4 товара в блока
$param['items_on_page'] = 8;
// Используем случайный вывод товара
$param['items_order'] = 'rand';
// Получаем все скидки магазина
$AllDiscount = $shop->GetAllDiscounts($shop_id);
// Скидки есть
if ($AllDiscount)
{
$param['select_discount'] = array();
// Цикл по полученным скидкам
while ($row = mysql_fetch_assoc($AllDiscount))
{
// В массив добавляем идентификаторы скидок
$param['select_discount'][] = $row['shop_discount_id'];
}
}
$shop->ShowShop($shop_id, 'МагазинКаталогТоваровНаГлавнойHPRU', $param);
}
Для вывода используется такой XSL шаблон:
<?xml version="1.0" encoding="utf-8"?>
<!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="utf-8" 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:if test="item">
<!-- Выводим товары магазина -->
<xsl:apply-templates select="item"/>
</xsl:if>
</xsl:template>
<!-- Шаблон для товара -->
<xsl:template match="item">
<div class="item_display"><div class="item_display_inner">
<div class="good_block">
<div class="index_item_title">
<a href="{/shop/path}{fullpath}{path}/" title="{name}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</div>
<!-- Указана малое изображение -->
<xsl:if test="small_image != ''">
<!-- style="background-image: url('/images/site15/good_background.jpg'); background-repeat: no-repeat; border: 0px solid; width: 151px; height: 124px;" -->
<a href="{/shop/path}{fullpath}{path}/">
<img src="{small_image}" alt="{name}" title="{name}" />
</a>
<!--<div class="hit" style="margin: {small_image/@height - 35}px 0 0 90px;"></div>-->
</xsl:if>
</div>
<div class="dcc">
<div class="deteils"><div class="inner"><xsl:value-of disable-output-escaping="yes" select="price_discount"/> <xsl:value-of disable-output-escaping="yes" select="currency"/>
<div class="stars"><img src="/images/stars.gif"/></div></div>
</div>
<!--<img align="left" alt="" src="/images/site15/d_c.jpg" />-->
<div class="in_cart">
<div class="inner">
<a href="{/shop/path}cart/?action=add&item_id={@id}" onclick="return AddIntoCart('{/shop/path}', {@id}, 1)" title="Купить" class="add_to_bask"></a>
</div>
</div>
<div style="clear: both" />
<!--<a href="{/shop/path}cart/?action=add&item_id={@id}" ><img alt="" src="/images/site15/add_card.jpg" onclick="return AddIntoCart('{/shop/path}', {@id}, 1)" /></a>-->
</div></div>
</div>
<xsl:if test="1=0">
<div class="shop_item">
<div class="left" style="text-align: center; position: relative;">
<p>
<a href="{/shop/path}{fullpath}{path}/" title="{name}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</p>
<p>
<!-- Цена -->
<b>
<xsl:value-of disable-output-escaping="yes" select="price_discount"/> <xsl:value-of disable-output-escaping="yes" select="currency"/> 
</b>
<!-- Ссылку на добавление в корзины выводим, если:
type = 0 - простой тип товара
type = 1 - электронный товар, при этом остаток на складе больше 0 или -1,
что означает неограниченное количество -->
<xsl:if test="type = 0 or (type = 1 and (eitem_count > 0 or eitem_count = -1))">
<a href="{/shop/path}cart/?action=add&item_id={@id}" onclick="return AddIntoCart('{/shop/path}', {@id}, 1)">
<img alt="В корзину" title="В корзину" src="/hostcmsfiles/images/cart.gif"/>
</a>
</xsl:if>
</p>
</div>
</div>
</xsl:if>
<xsl:if test="position() = round(/shop/items_on_page div 2)">
<xsl:text disable-output-escaping="yes">
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<!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="utf-8" 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:if test="item">
<!-- Выводим товары магазина -->
<xsl:apply-templates select="item"/>
</xsl:if>
</xsl:template>
<!-- Шаблон для товара -->
<xsl:template match="item">
<div class="item_display"><div class="item_display_inner">
<div class="good_block">
<div class="index_item_title">
<a href="{/shop/path}{fullpath}{path}/" title="{name}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</div>
<!-- Указана малое изображение -->
<xsl:if test="small_image != ''">
<!-- style="background-image: url('/images/site15/good_background.jpg'); background-repeat: no-repeat; border: 0px solid; width: 151px; height: 124px;" -->
<a href="{/shop/path}{fullpath}{path}/">
<img src="{small_image}" alt="{name}" title="{name}" />
</a>
<!--<div class="hit" style="margin: {small_image/@height - 35}px 0 0 90px;"></div>-->
</xsl:if>
</div>
<div class="dcc">
<div class="deteils"><div class="inner"><xsl:value-of disable-output-escaping="yes" select="price_discount"/> <xsl:value-of disable-output-escaping="yes" select="currency"/>
<div class="stars"><img src="/images/stars.gif"/></div></div>
</div>
<!--<img align="left" alt="" src="/images/site15/d_c.jpg" />-->
<div class="in_cart">
<div class="inner">
<a href="{/shop/path}cart/?action=add&item_id={@id}" onclick="return AddIntoCart('{/shop/path}', {@id}, 1)" title="Купить" class="add_to_bask"></a>
</div>
</div>
<div style="clear: both" />
<!--<a href="{/shop/path}cart/?action=add&item_id={@id}" ><img alt="" src="/images/site15/add_card.jpg" onclick="return AddIntoCart('{/shop/path}', {@id}, 1)" /></a>-->
</div></div>
</div>
<xsl:if test="1=0">
<div class="shop_item">
<div class="left" style="text-align: center; position: relative;">
<p>
<a href="{/shop/path}{fullpath}{path}/" title="{name}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</p>
<p>
<!-- Цена -->
<b>
<xsl:value-of disable-output-escaping="yes" select="price_discount"/> <xsl:value-of disable-output-escaping="yes" select="currency"/> 
</b>
<!-- Ссылку на добавление в корзины выводим, если:
type = 0 - простой тип товара
type = 1 - электронный товар, при этом остаток на складе больше 0 или -1,
что означает неограниченное количество -->
<xsl:if test="type = 0 or (type = 1 and (eitem_count > 0 or eitem_count = -1))">
<a href="{/shop/path}cart/?action=add&item_id={@id}" onclick="return AddIntoCart('{/shop/path}', {@id}, 1)">
<img alt="В корзину" title="В корзину" src="/hostcmsfiles/images/cart.gif"/>
</a>
</xsl:if>
</p>
</div>
</div>
</xsl:if>
<xsl:if test="position() = round(/shop/items_on_page div 2)">
<xsl:text disable-output-escaping="yes">
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Пока были товары в категориях — выводились они. Как только дописал парсер, который из прайсов поставщика забивает товары в соответствии с уровнем вложености (предварительно удалив лишнее содержимое каталога) и все товары стали размещаться в подкатегориях различного уровня вложености — данный шаблон начал выводить пустоту.
Пробовал сделать вывод по принципу (нашел в ), но получаю Undefined variable: shop_item_path (при попытке заменить на shop_item_path_suffix) получаю то же самое.
При использовании
$param['current_group_id'] = false;
, насколько я понял, не выводит ничего через if test="item".Можете подсказать способ реализации вывода, ссылки на актуальную информацию или примеры работающего кода?
Авторизация