Зависимость активности товара от его цены при импорте

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

При импорте из 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. Так как атрибут отвечает за активность страницы, активность будет изменяться при импорте в зависимости от цены.