Вывод превью других товаров из раздела (xslt)

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 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>

В результате получим уменьшенные изображения остальных товаров, которые являются ссылками на страницы этих товаров.