Зависимость активности товара от его цены при импорте
При импорте из ComerceML2.0 активность выставляется автоматически в зависимости от наличия товара на складе. Однако нередко возникают ситуации, когда активность нужно убирать если в предложении поступила цена 0. Сделать это можно кастомизируя шаблон импорта из commerceML2.0. Для этого, откроем файл ~/xsl/import/custom/commerceML2.xsl и вставим в этот шаблон следующий код:
<?xml version="1.0" encoding="UTF-8"?>
<!--
TODO: // Write here your own templates
-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
xmlns:udt="http://umi-cms.ru/2007/UData/templates"
extension-element-prefixes="php"
exclude-result-prefixes="xsl php udt">
<xsl:template match="Предложения/Предложение">
<page id="{Ид}" update-only="1">
<xsl:attribute name="is-active">
<xsl:apply-templates select="Цены" mode="activ"/>
</xsl:attribute>
<properties>
<xsl:apply-templates select="Цены" />
<group name="catalog_stores_props" title="Склады">
<property name="common_quantity" title="Общее количество на складах" type="float" is-public="1" allow-runtime-add="1">
<type data-type="float" />
<title>Общее количество на складах</title>
<value>
<xsl:value-of select="Количество"/>
</value>
</property>
</group>
</properties>
</page>
</xsl:template>
<xsl:template match="Цены" mode="activ">
<xsl:param name="default-price" select="Цена[ИдТипаЦены = string($settings//item[@key='exchange.translator.1c_price_type_id'])]" />
<xsl:param name="count-price" select="$settings//item[@key='prices']" />
<xsl:choose>
<xsl:when test="count(Цена) > 1 and $default-price">
<xsl:apply-templates select="$default-price" mode="default-price1"/>
</xsl:when>
<xsl:when test="count(Цена) > 1 and not($default-price)">
<xsl:apply-templates select="Цена[position() = 1]" mode="default-price1"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="Цена" mode="default-price1"/>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="Цена" mode="other-price1"/>
</xsl:template>
<xsl:template match="Цена" mode="default-price1">
<xsl:choose>
<xsl:when test="ЦенаЗаЕдиницу='0'">
<xsl:value-of select="0"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="Цена" mode="other-price1">
<xsl:variable name="price_id" select="concat('exchange.translator.1c_price.', ИдТипаЦены)" />
<xsl:if test="$settings//item[@key=$price_id]">
<xsl:variable name="currency_ref" select="concat('udata://exchange/getCurrencyCodeByAlias/?alias=', php:function('urlencode', string(Валюта)))" />
<xsl:variable name="currency" select="document($currency_ref)/udata" />
<xsl:choose>
<xsl:when test="ЦенаЗаЕдиницу='0'">
<xsl:value-of select="0"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
данный шаблон основан на блоках стандартного шаблона импорта, однако в нём вместо вывода цены со всеми тегами, происходит проверка на значение цены, и если она равна 0, то в атрибут товара is-active запишется 0, и наоборот, если цена не равна 0, то запишеться 1. Так как атрибут отвечает за активность страницы, активность будет изменяться при импорте в зависимости от цены.