А как сделать отображение всех товаров одного производителя?

#
А как сделать отображение всех товаров одного производителя?
Собственно хотелось как-то вывести список производителей, которы забиты интернет магазин со ссылками, чтоб при клике выводились все представленные в инетшопе товары данного производителя, не подскажете как это реализовать?
#
Re: А как сделать отображение всех товаров одного производителя?
см. функцию ShowProducerList или что-то типа такого (пример - сайт http://www.forwater.ru)
#
Re: А как сделать отображение всех товаров одного производителя?
Sticker, реализация подобного функционала содержит следующие этапы:
1. добавить блок вывода списка всех производителей в макет или шаблон страницы:
<?
$shop = new shop();
$shop->ShowProducersList('МагазинСписокПроизводителей');
?>

2. создать 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="/producerslist">
   <xsl:apply-templates select="producer"/>
</xsl:template>
   
<xsl:template match="producer">
   <p><a href="/shop/?action=all&amp;producer_id={@id}"><xsl:value-of select="shop_producers_list_name" /></a></p>
</xsl:template>

</xsl:stylesheet>


3. в типовую динамическую страницу "Интернет-магазин" вместо имеющегося блока фильтра по производителям добавляем следующее:
/* Ограничиваем по производителю */
if (to_int($_GET['producer_id']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_producers_list_id';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '='; // Условие
$element['value'] = to_int($_GET['producer_id']);
$element['sufix'] = '';
$param['select'][] = $element;
if(isset($_GET['action']))
{
if(to_str($_GET['action']) == 'all')
{
$param['current_group_id']=false;
$external_propertys['producer_all'] = 1;
}
}
if(isset($_GET['apply_filter']))
{
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
   $external_propertys['producer_id'] = to_int($_GET['producer_id']);
}

4. в XSL-шаблон для списка товаров(по умолчанию используется "МагазинКаталогТоваров" ) необходимо заменить имеющийся тэмплейт для вывода списка ссылок на страницы на этот:
<!-- ============================ -->
<!-- Цикл для вывода строк ссылок -->
<!-- ============================ -->
<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">
         
         <!-- Заносим в переменную $parent_group_id идентификатор текущей группы -->
         <xsl:variable name="parent_group_id" select="/shop/@current_group_id"/>
         
         <!-- Определяем группу для формирования адреса ссылки -->
         <xsl:variable name="group_link"><xsl:choose>
            <!-- Если группа не корневая (!=0) -->
            <xsl:when test="$parent_group_id != 0"><xsl:value-of select="/shop//group[@id=$parent_group_id]/fullpath"/></xsl:when>
            <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose></xsl:variable>
         
         <!-- Определяем адрес ссылки -->
         <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>

         <!-- Передаем фильтр -->
         <xsl:variable name="filter">
         <xsl:choose>
         <xsl:when test="/shop/apply_filter/node()">?action=apply_filter&amp;producer_id=<xsl:value-of select="/shop/producer_id"/>&amp;group_id=<xsl:value-of select="/shop/group_id"/>&amp;price_from=<xsl:value-of select="/shop/price_from"/>&amp;price_to=<xsl:value-of select="/shop/price_to"/>&amp;on_page=<xsl:value-of select="/shop/on_page"/>
            <xsl:if test="/shop/property_xml/node()">
               <!-- GET для доп. свойств -->
               <xsl:value-of select="/shop/property_xml"/>
            </xsl:if>
         </xsl:when>
<xsl:when test="/shop/producer_all/node()">?action=all&amp;producer_id=<xsl:value-of select="/shop/producer_id"/>&amp;group_id=<xsl:value-of select="/shop/group_id"/>&amp;price_from=<xsl:value-of select="/shop/price_from"/>&amp;price_to=<xsl:value-of select="/shop/price_to"/>&amp;on_page=<xsl:value-of select="/shop/on_page"/>
<xsl:if test="/shop/property_xml/node()">
               <!-- GET для доп. свойств -->
               <xsl:value-of select="/shop/property_xml"/>
            </xsl:if>
         </xsl:when>
<xsl:when test="/shop/group_id/node()">?action=&amp;group_id=<xsl:value-of select="/shop/group_id"/>
<xsl:if test="/shop/property_xml/node()">
               <!-- GET для доп. свойств -->
               <xsl:value-of select="/shop/property_xml"/>
            </xsl:if>
         </xsl:when>
         <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
         </xsl:variable>
         
         <!-- Определяем первый символ вопрос или амперсанд -->
         <xsl:variable name="first_symbol">
         <xsl:choose>
            <xsl:when test="$filter != ''">&amp;</xsl:when>
            <xsl:otherwise>?</xsl:otherwise>
         </xsl:choose>
         </xsl:variable>
         
         <!-- Данные для стрелок сортировки -->
         <xsl:variable name="arrows">
         <xsl:choose>
            <xsl:when test="(/shop/sort_by_field = 1) or (/shop/sort_by_field = 2)">
               <xsl:choose>
                  <!-- Стрелка вверх -->
                  <xsl:when test="/shop/order_direction = 'ASC'"><xsl:value-of select="$first_symbol"/>sort_by_field=<xsl:value-of select="/shop/sort_by_field"/>&amp;order_direction=1</xsl:when>
                  <!-- Стрелка вниз -->
                  <xsl:otherwise><xsl:value-of select="$first_symbol"/>sort_by_field=<xsl:value-of select="/shop/sort_by_field"/>&amp;order_direction=2</xsl:otherwise>
               </xsl:choose>   
            </xsl:when>
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
         </xsl:variable>
         <a href="{/shop/path}{$group_link}{$number_link}{$filter}{$arrows}" class="page_link"><xsl:value-of select="$i+1"/></a>&#xA0;
      </xsl:if>

      <!-- Не ставим ссылку на страницу-->
      <xsl:if test="$i = $current_page">
         <span class="current"><xsl:value-of select="$i+1"/></span>&#xA0;
      </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>
#
Re: А как сделать отображение всех товаров одного производителя?
Спасибо огромное ) очень помогло! Все отлично работает
#
Re: А как сделать отображение всех товаров одного производителя?
пожалуйста
#
Re: А как сделать отображение всех товаров одного производителя?
подскажите как в списке отобразить логотипы  производителей .
#
Re: А как сделать отображение всех товаров одного производителя?
Вот пример(необходимо добавить в XSL-шаблон "МагазинСписокПроизводителей" ):
<xsl:template match="producer">
...
<!-- Изображение для производителя, если есть -->
      <xsl:if test="image != ''">
         
         <img src="/upload/{image}" style="margin: 0px 5px 15px 0px" />
         
      </xsl:if>
...
</xsl:template>
#
Re: А как сделать отображение всех товаров одного производителя?
Подскажите, пожалуйста, а как можно сделать, чтобы на странице с товарами того или иного производителя выводилось строка, например, "Товары компании Х"?

Т.е., к примеру: имеется список производителей: X, Y, Z и т.д. Пользователь кликает на производителе Х и ему выводится полный список товаров этого производителя. И нужно сверху, в начале страницы, подписать, что это товары именно этого производителя.
#
Re: А как сделать отображение всех товаров одного производителя?
Daniil_T, добавьте в XSL-шаблон, с помощью которого Вы выводите список товаров(по умолчанию "МагазинКаталогТоваров" ) код(выделен жирным):
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
...
<xsl:if test="producer_id/node()">
<xsl:variable name="prod_id" select="producer_id"/>
<h1>Товары компании <xsl:value-of disable-output-escaping="yes" select=".//producer[@id=$prod_id]/name"/></h1>
</xsl:if>

...
</xsl:template>
#
Re: А как сделать отображение всех товаров одного производителя?
natalya, спасибо огромное за ответ! И спасибо большое за что, что в теме так всё подробно описали и рассказали, как можно сделать список производителей! Очень помогли! Удачи!
Авторизация