Все скидки.

#
Все скидки.
Уважаемые пользователи, и админы.

Подскажите пожалуйста как вывести страницу на которой будут отображены все скидки магазина, с разделением по группам. Типа прайса только в нем только товары у которых есть скидка.

Нашёл похожий форум http://www.hostcms.ru/forums/17/2254/ , но там немного не то и не работае предложенное решение.

Всем спасибо кто поможет.
Модератор
#
Re: Все скидки.
kvasiliy,
Поясните, речь идет об отображении скидок или товаров со скидками? У скидок групп то нет.
#
Re: Все скидки.
Речь идёт об отображении товаров только со скидками.

Вывод по примеру как в прайсе, только выводятся товары только со скидками и группы только в которых есть товары со скидками (если в группе нет ни одной скидки то она соответственно не показывается)...
Модератор
#
Re: Все скидки.
kvasiliy,
Ограничение на выборку товаров со скидками можно найти в демо-сайте прям на главной странице:
         // Получаем все скидки магазина
         $AllDiscount = $shop->GetAllDiscounts($shop_id);

         // Скидки есть
         if ($AllDiscount)
         {
            $param['select_discount'] = array();

            // Цикл по полученным скидкам
            while ($row = mysql_fetch_assoc($AllDiscount))
            {
               // В массив добавляем идентификаторы скидок
               $param['select_discount'][] = $row['shop_discount_id'];
            }
         }

Остается в XSL-шаблоне только добавить проверку, что если в группе товаров 0, то не выводить ее. Число товаров выводится в XML, так что и с этой проверкой никаких проблем.
#
Re: Все скидки.
Сделал вроде . только вот проблема, если задаю скидку товару который находится не в корневой группе каталога а например:
Интернет-магазин
         Куртки
              Куртки летние
                     Куртка со скидкой 50%.

Выводит только если скидка у товара в крневой группе
например:
Интернет-магазин
         Куртки
            Куртка со скидкой 50%.

Как решить вопрос?
Модератор
#
Re: Все скидки.
kvasiliy,
не совсем понял, у Вас товары из групп вообще не выводятся? Если да, то покажите измененный фрагмент, весь XSL не нужно показывать.
#
Re: Все скидки.
Нет! Из групп выводятся, только из корневых групп магазина. Из подгрупп не выводятся. (тоесть есть корневые группы и в них есть ещё группы и из них не выводится, а к примеру если есть корневая группа и в ней нет подгрупп а есть товары то эти товары со скидками выводятся.)

Вот 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="/shop">
      <!-- CSS для таблицы с прайсом -->
      <style TYPE="text/css">
         <xsl:comment>
            <xsl:text disable-output-escaping="yes">
               <![CDATA[
               .price_table_border, .price_table_border td
               {
               border-collapse: collapse;
               empty-cells: show;
               border-width:1px;
               border-color: #CCCCCC;
               border-style: dashed;
               padding-left: 5px;
               }
               ]]>
            </xsl:text>
         </xsl:comment>
      </style>
      
      <h1>Прайс-лист</h1>
      
      <!-- Отображаем таблицу -->
      <table class="price_table_border">
         <tr bgcolor="#EEEEEE">
         <td align="center" height="25" valign="middle"><b>Фото</b></td>
         <td align="center" valign="middle"><b>Артикул</b></td>
         <td align="center" valign="middle"><b>Наименование товара</b></td>
      <td align="center" valign="middle"><b>описание</b></td>
         <td align="center" valign="middle"><b>Производитель</b></td>
         <td align="center" valign="middle"><b>ед. изм.</b></td>
<td align="center" valign="middle">Старая цена</td>
         <td align="center" valign="middle"><b>Цена</b></td>
         </tr>
         <xsl:apply-templates select="/shop/item">
            <xsl:with-param name="group_id" select="0"/>
         </xsl:apply-templates>
         <xsl:apply-templates select="//group"><xsl:sort select="@id" data-type="number" order="ascending"/></xsl:apply-templates>
      </table>
      
      <!-- Строка ссылок на другие страницы каталога -->
      <p>
         <xsl:if test="count_items > 0 and items_on_page > 0">
            <xsl:call-template name="for">
               <xsl:with-param name="n" select="count_items div items_on_page"/>
               <xsl:with-param name="current_page" select="current_page"/>
            </xsl:call-template>
            <div style="clear: both"></div>
         </xsl:if>
      </p>
      
   </xsl:template>
   
   <!-- Группы товаров -->
   <xsl:template match="group">
      <xsl:variable name="attr_group_id"><xsl:value-of select="@id"/></xsl:variable>
      <xsl:if test="count(/shop/item[@group=$attr_group_id]) > 0">
         <tr>
            <td bgcolor="#EEEEEE" colspan="7">
               <xsl:value-of select="name"/>
            </td>
         </tr>
         <xsl:apply-templates select="/shop/item">
            <xsl:with-param name="group_id" select="@id"/>
         </xsl:apply-templates>
      </xsl:if>
   </xsl:template>
   
   <!-- Товары -->
   <xsl:template match="/shop/item">
      <xsl:param name="group_id" />
      <xsl:if test="$group_id = @group">
         <tr>
            <td>
               <xsl:if test="small_image!=''">
               <a href="{image}" class="highslide" onclick="return hs.expand(this)" title="показать фото {name}"><img src="/images/poto.gif" alt="показать фото {name}"/></a>
               </xsl:if>
            </td>
            <td><xsl:value-of disable-output-escaping="yes" select="marking_of_goods"/></td>
         <td><b><xsl:value-of select="name"/></b></td>
         <td><xsl:if test="weight != 0"><xsl:value-of disable-output-escaping="yes" select="description"/></xsl:if></td>
            <td><xsl:value-of disable-output-escaping="yes" select="producer/name"/></td>
            <td><xsl:value-of disable-output-escaping="yes" select="mesure"/></td>
<td><strike><xsl:value-of select="price"/>&#xA0;<xsl:value-of select="currency"/></strike></td>
<td><b><xsl:value-of select="price_discount"/>&#xA0;<xsl:value-of select="currency"/></b></td>
         </tr>
      </xsl:if>
   </xsl:template>
   
   <!-- ============================ -->
   <!-- Цикл для вывода строк ссылок -->
   <!-- ============================ -->
   <xsl:template name="for">
      <xsl:param name="i" select="0"/>
      <xsl:param name="n"/>
      <xsl:param name="current_page"/>
      
      <xsl:if test="$n > $i and $n > 1">
         <!-- Ставим ссылку на страницу-->
         <xsl:if test="$i != $current_page">
            
            
            <!-- Определяем адрес ссылки -->
            <xsl:variable name="number_link"><xsl:choose>
                  <!-- Если не нулевой уровень -->
                  <xsl:when test="$i != 0">page-<xsl:value-of select="$i+1"/>/</xsl:when>
                  <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
                  <xsl:otherwise></xsl:otherwise>
            </xsl:choose></xsl:variable>
            
            <a href="{/shop/path}price/{$number_link}" class="page_link"><xsl:value-of select="$i+1"/></a>
         </xsl:if>
         
         <!-- Не ставим ссылку на страницу-->
         <xsl:if test="$i = $current_page">
            <span class="current"><xsl:value-of select="$i+1"/></span>
         </xsl:if>
         
         <!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
         <xsl:call-template name="for">
            <xsl:with-param name="i" select="$i + 1"/>
            <xsl:with-param name="n" select="$n"/>
            <xsl:with-param name="current_page" select="$current_page"/>
         </xsl:call-template>
         
      </xsl:if>
   </xsl:template>
   
</xsl:stylesheet>
Модератор
#
Re: Все скидки.
kvasiliy,
А где Ваше условие, которое Вы добавили?
#
Re: Все скидки.
я создал структуру с типом раздела "Динамическаяы страница"
в ней задал этот код:
<?php
      if (class_exists('shop'))
      {
         $shop = & singleton('shop');

         $shop_id = 28;

         $param = array();

         // Товары выбираем из всех групп
         $param['current_group_id'] = false;

         // Получаем все скидки магазина
         $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, 'Распродажа', $param);
      }
      ?>


Если Показываю не на XSL Распродажа (код его привёл выше)
а на XSL МагазинГорячиеПредложенияНаГлавной то все предложения выводятся. Но хотелось бы как в прайсе (что-бы шло ещё и разбиение по категориям...)
HostCMS писал(а):
А где Ваше условие, которое Вы добавили?

немного не пойму о каком условии Вы говорите?
#
Re: Все скидки.
вот посмотрите :
http://www.altay-magazin.ru/sale/
http://www.altay-magazin.ru/sale2/
Совершенно одинаковые излы структуры разными XSL шаблонами выводят горячие предложения.

причём в первом случае ни каких особых условий в XSL нет... тем не менее выводятся все товары...
Авторизация