Вывод превью других товаров из раздела (xslt)
Актуально для версии 2.9
Задача: необходимо в карточке товара вывести превью других товаров из этого же раздела каталога.
Получим все товары в разделе с помощью выборки Usel, для этого создадим файл /usels/optional.xml и поместим в него следующий код:
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="catalog" method="object" />
<category depth="1">{parent}</category>
</target>
<extended>
<properties>photo</properties>
</extended>
</selection>
В шаблоне вывода карточки товара в файле /www/templates/demodizzy/xslt/modules/catalog/object-view.xsl в нужном месте прописываем вызов Usel. Предварительно заведем переменную, в которой будет id текущего раздела, и передадим ее в качестве параметра для Usel:
<xsl:variable name="par" >
<xsl:value-of select=".//page/@parentId" />
</xsl:variable>
<xsl:apply-templates select="document(concat('usel://optional/?parent=',$par))" mode="other" />
Заведем переменную, в которую будет передаваться id страницы текущего товара, чтобы впоследствии не отображать его в результатах выборки:
<xsl:variable name="current">
<xsl:value-of select="result/page/@id" />
</xsl:variable>
Далее пропишем шаблон обработки результатов выборки:
<xsl:template match="page" mode="other">
<xsl:variable name="oth">
<xsl:value-of select=".//@id" />
</xsl:variable>
<xsl:if test="$current!=$oth">
<xsl:variable name="pic_path" select=".//property[@name='photo']/value" />
<xsl:variable name="pic_min" select="document(concat('udata://system/makeThumbnail/(.', $pic_path, ')/100/100'))/udata/src"/>
<xsl:variable name="obj_path" select=".//@link" />
<a href="{$obj_path}"><img src="{$pic_min}"/></a>
</xsl:if>
</xsl:template>
В результате получим уменьшенные изображения остальных товаров, которые являются ссылками на страницы этих товаров.