Показ нескольких товаров из той же категории,что и текущий товар.

#
Показ нескольких товаров из той же категории,что и текущий товар.
Здравствуйте!Есть карточка товара. И под всем содержимом этой карточки товара, нужен вывод нескольких товаров из той категории,что и сам товар который сейчас просматривается.
Просто я не понимаю куда копать. В сторону ТДС или можно как-то вызвать в XSL шаблонах?

Я пробовал совместить XSL каталога списка товаров с XSL товара,но что-то не получилось. В теории я знаю как сделать,но вот на практике не очень. Я так понимаю если выводить через XSL,то нужно определить id переменой родительской категории типа [parent_id=$group] и потом вызвать показ товаров из этой категории.

Может кто делал подобные вещи?

Много примеров есть где выводят по какому нибудь дополнительному свойству. Используют  ->queryBuilder() ,   ->leftJoin()
Как им скормить id текущей категории и вывести оттуда товары?
Модератор
#
Re: Показ нескольких товаров из той же категории,что и текущий товар.
В магазине приложений мы делаем так:

if ($Shop_Controller_Show->item)
{
   $oShop = $Shop_Controller_Show->getEntity();

   // XML-сущность, к которй будут добавляться похожие приложения
   $oSimilarXmlEntity = Core::factory('Core_Xml_Entity')->name('similar');

   // Добавляем XML-сущность контроллеру показа
   $Shop_Controller_Show->addEntity($oSimilarXmlEntity);

   $oShop_Items = $oShop->Shop_Items;
   $oShop_Items
      ->queryBuilder()
      ->select('shop_items.*')
      ->where('shop_items.active', '=', 1)
      ->where('shop_items.shop_group_id', '=', $Shop_Controller_Show->group)
      ->where('shop_items.id', '!=', $Shop_Controller_Show->item)
      ->limit($limit)
      ->clearOrderBy()
      ->orderBy('RAND()');

   $aShop_Items = $oShop_Items->findAll(FALSE);
   foreach   ($aShop_Items as $oShop_Item)
   {
      $oSimilarXmlEntity->addEntity(
         $oShop_Item->clearEntities()
            ->addForbiddenTag('text')
      );
   }
}


Добавляется в ТДС магазина. В XML пойдет тег similar, в нем будут товары текущей группы, кроме просматриваемого товара. Ну а далее просто выводите их в XSL-шаблоне товара.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Показ нескольких товаров из той же категории,что и текущий товар.
alexander.egorov, Код добавляем же в "Код страницы", а не в "Настройки страницы"?
И как вызвать тек similar?
Модератор
#
Re: Показ нескольких товаров из той же категории,что и текущий товар.
В коде ТДС, перед блоком с ->show()

pd-art писал(а):
И как вызвать тек similar?

Эм, как и все остальные тeги в XSL.
Вызов:
<xsl:apply-templates select="/shop/similar/shop_item" mode="similar"/>


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

<xsl:template match="shop_item" mode="similar">
....
</xsl:template>


Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Показ нескольких товаров из той же категории,что и текущий товар.
alexander.egorov, все получилось,но есть одно НО. У меня сейчас выводится как бы заново страница...т.е. идет карточка товара, потом идет сам вывод кода с карточкой товара этого же товара и потом под ним идет вывод товаров из этой же категории.

Модератор
#
Re: Показ нескольких товаров из той же категории,что и текущий товар.
XSL бы целиком увидеть. По такому описанию ничего сказать не могу.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Показ нескольких товаров из той же категории,что и текущий товар.
alexander.egorov,

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:hostcms="http://www.hostcms.ru/"
                exclude-result-prefixes="hostcms">
  <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:decimal-format name="my" decimal-separator="," grouping-separator=" "/>

  <xsl:template match="/shop">
    <xsl:apply-templates select="shop_item"/>
  </xsl:template>

  <xsl:template match="shop_item">
    <xsl:variable name="shop_item_id" select="@id" />
    <div id="aloneShopItemName" data-name="{name}"></div>

    <h1 hostcms:id="{@id}" hostcms:field="name" hostcms:entity="shop_item"><xsl:value-of disable-output-escaping="yes" select="name"/></h1>

    <!-- Получаем ID родительской группы и записываем в переменную $group -->
    <xsl:variable name="group" select="/shop/group"/>

    <xsl:variable name="dir" select="dir"/>

    <div class="shopAloneItemTop">
      <div class="shopAloneItemTopImages">
        <a href="{dir}{image_large}" class="fancybox" rel="aloneItem" style="background-image: url({dir}{image_small});"></a>
        <xsl:if test="count(property_value[tag_name='additional_photos']) &gt; 0">
          <xsl:for-each select="property_value[tag_name='additional_photos'][position() &lt; 9]">
            <a href="{$dir}{file}" class="fancybox" rel="aloneItem" style="background-image: url({$dir}{file});"></a>
          </xsl:for-each>
        </xsl:if>
      </div>
      <div class="shopAloneItemTopBox">
        <span class="shopAloneItemTopBoxPrice"><xsl:value-of select="format-number(price, '### ##0', 'my')"/><xsl:text> </xsl:text><xsl:value-of select="currency"/></span>
        <a href="#" class="blueButton big mode2 shopAloneItemTopBoxOrder popupOrder">Заказать</a>
        <div id="aloneItemCompareWrapper">
          <a href="/catalog/compare_items/" class="shopItemStartCompare">
            <xsl:if test="/shop/comparing/shop_item and count(/shop/comparing/shop_item) &gt; 1">
              <xsl:attribute name="class">shopItemStartCompare show</xsl:attribute>
            </xsl:if>
            <xsl:text>Сравнить (</xsl:text><xsl:value-of select="count(/shop/comparing/shop_item)"/><xsl:text>)</xsl:text>
          </a>
          <a href="#" class="shopItemAddCompare" onclick="return $.shopItemComparison('{/shop/url}', {@id}, this)">
            <xsl:if test="/shop/comparing/shop_item[@id = $shop_item_id]/node()">
              <xsl:attribute name="class">shopItemAddCompare current</xsl:attribute>
            </xsl:if>
          </a>
        </div>
        <div class="shopAloneItemTopBoxText">
          <xsl:value-of disable-output-escaping="yes" select="description"/>
        </div>
      </div>
      <div class="both"></div>
    </div>

    <table class="shopItemCTable">
      <tr>
        <td colspan="3" class="shopItemCTableFeatures">Подробные характеристики</td>
      </tr>

      <xsl:apply-templates select="property_value[tag_name='parameter_power']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_voltage']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_frequency']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_powerFactor']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_consumptionCurrent']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_operatingCurrent']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_maximumCurrent']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_degreeProtection']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_mark']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_lampMark']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_numberLeds']"/>
      <!--<xsl:apply-templates select="property_value[tag_name='parameter_luminousFlux']"/>-->
      <xsl:apply-templates select="property_value[tag_name='parameter_luminousFlux_tj']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_luminousFlux_ta']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_colorTemperature']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_colorRenderingIndex']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_pulsationLuminousFlux']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_typeCurveIntensity']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_operatingTemperature']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_climaticPerformance']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_degreeProtectionEnvironment']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_typeConnection']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_bodyLamp']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_diffuserMaterial']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_mount']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_overallDimensions']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_massLuminaire']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_lifeLamp']"/>
      <xsl:apply-templates select="property_value[tag_name='parameter_factoryWarranty']"/>

    </table>

    <xsl:if test="count(property_value[tag_name='drawings']) &gt; 0">
      <div class="redHeader">Схема и КСС</div>
      <xsl:for-each select="property_value[tag_name='drawings'][position() &lt; 9]">
        <a href="{$dir}{file}" class="fancybox left_image drawings_image" rel="drawings"><img src="{$dir}{file}" alt=""/></a>
      </xsl:for-each>
      <div class="both"></div>
    </xsl:if>

    <div class="redHeader">Область применения</div>
    <div><xsl:value-of select="text" disable-output-escaping="yes"/></div>
    <div class="both"></div>            
      
    <div class="both"><xsl:apply-templates select="/shop/similar/shop_item" mode="similar"/></div>
      
    </xsl:template>   
   
   
   <xsl:template match="shop_item" mode="similar">
  <xsl:variable name="shop_item_id" select="@id" />
    <div class="shopItem">
      <div><a href="{url}" class="shopItemName"><xsl:value-of disable-output-escaping="yes" select="name"/></a></div>
      <a href="{dir}{image_large}" class="shopItemImage fancybox" style="background-image: url({dir}{image_small});"></a>
      <div class="shopItemPrice"><xsl:value-of select="format-number(price, '### ##0', 'my')"/><xsl:text> </xsl:text><xsl:value-of select="currency"/></div>
      
    </div>
   </xsl:template>
   

  <xsl:template match="property_value">
    <xsl:variable name="tag_name" select="tag_name"/>
    <tr>
      <td><xsl:value-of select="//property[tag_name=$tag_name]/name"/> <a href="#" class="modalInfo" data-text="{//property[tag_name=$tag_name]/description}">?</a></td>
      <td><xsl:value-of select="value" disable-output-escaping="yes"/></td>
    </tr>
  </xsl:template>     
   
   </xsl:stylesheet>
#
Re: Показ нескольких товаров из той же категории,что и текущий товар.
alexander.egorov, просто попробовал на чистой CMS сделать....все получилось. А на сайте который достался под правки все как-то не так.
Тоже думаю на XSL т.к. на чистый сайт ставил то,что вы выше предложили и все норм,а тут((((
Или предыдущий код ТДС как-то влияет...я уже не знаю.
#
Re: Показ нескольких товаров из той же категории,что и текущий товар.
alexander.egorov, разобрался!!! В ТДС вся проблема была,там в условия через if напихали $Shop_Controller_Show->show();  и выводилось два раза карточка товара (карточка в карточке).
Спасибо alexander.egorov

P.S. Можно эту тему записать в решения.
#
Re: Показ нескольких товаров из той же категории,что и текущий товар.
Александр, подскажите пожалуйста, как добавить в этот код вывод Дополнительных свойств товара?
iNikSite - дизайн и фронтенд разработка
Авторизация