Импорт характеристик из offers дополнительный шаблон — различия между версиями
Материал из Umicms
Mad grant (обсуждение | вклад) (Новая страница: «'''Актуально для версии 2.9.6''' == Проблема == Если Вы хотите использовать шаблон из статьи [[Им…») |
Mad grant (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 34: | Строка 34: | ||
</ХарактеристикиТовара> | </ХарактеристикиТовара> | ||
</source> | </source> | ||
+ | |||
+ | То имеющийся шаблон не подойдет, его нужно переделывать, пример ниже. | ||
== Шаблон == | == Шаблон == | ||
− | [[category:Интеграция с 1С]] | + | <source lang="xml"> |
+ | <?xml version="1.0" encoding="UTF-8"?> | ||
+ | <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="ПакетПредложений"> | ||
+ | <meta> | ||
+ | <source-name>commerceML2</source-name> | ||
+ | </meta> | ||
+ | <types> | ||
+ | <type id="root-guides-type" guid="root-guides-type" title="Справочники" parent-id="0" locked="locked"> | ||
+ | <base/> | ||
+ | <fieldgroups/> | ||
+ | </type> | ||
+ | <xsl:apply-templates select="Предложения/Предложение" mode="types"/> | ||
+ | </types> | ||
+ | <objects> | ||
+ | <xsl:apply-templates select="Предложения/Предложение" mode="objects"/> | ||
+ | </objects> | ||
+ | <pages> | ||
+ | <xsl:apply-templates select="Предложения/Предложение" mode="pages"/> | ||
+ | </pages> | ||
+ | <options> | ||
+ | <xsl:apply-templates select="Предложения/Предложение" mode="entities"/> | ||
+ | </options> | ||
+ | </xsl:template> | ||
+ | |||
+ | <xsl:key name="guid_name" match="ПакетПредложений/Предложения/Предложение/ХарактеристикиТовара/ХарактеристикаТовара" use="Наименование"/> | ||
+ | |||
+ | <xsl:template match="Предложения/Предложение" mode="types"> | ||
+ | <xsl:for-each select="ХарактеристикиТовара/ХарактеристикаТовара"> | ||
+ | <xsl:if test="generate-id(.) = generate-id(key('guid_name', Наименование))"> | ||
+ | <type parent-id="root-guides-type" guide="guide" public="public"> | ||
+ | <xsl:attribute name="id"> | ||
+ | <xsl:value-of select="concat('Справочник для поля ', Наименование)"/> | ||
+ | </xsl:attribute> | ||
+ | <xsl:attribute name="title"> | ||
+ | <xsl:value-of select="concat('Справочник для поля ', Наименование)"/> | ||
+ | </xsl:attribute> | ||
+ | <base/> | ||
+ | <fieldgroups/> | ||
+ | </type> | ||
+ | </xsl:if> | ||
+ | </xsl:for-each> | ||
+ | </xsl:template> | ||
+ | |||
+ | <xsl:template match="Предложения/Предложение" mode="objects"> | ||
+ | <xsl:for-each select="ХарактеристикиТовара/ХарактеристикаТовара"> | ||
+ | <object id="{php:function('md5', concat(substring-after(../../Ид, '#'), Значение, Наименование))}" name="{Значение}"> | ||
+ | <xsl:attribute name="type-id"> | ||
+ | <xsl:value-of select="concat('Справочник для поля ', Наименование)"/> | ||
+ | </xsl:attribute> | ||
+ | </object> | ||
+ | </xsl:for-each> | ||
+ | </xsl:template> | ||
+ | |||
+ | <xsl:template match="Предложения/Предложение" mode="pages"> | ||
+ | <xsl:choose> | ||
+ | <xsl:when test="contains(Ид, '#')"> | ||
+ | <page id="{substring-before(Ид, '#')}"> | ||
+ | <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> | ||
+ | <group name="catalog_option_props" title="Опционные свойства" visible="visible"> | ||
+ | <xsl:for-each select="ХарактеристикиТовара/ХарактеристикаТовара"> | ||
+ | <property name="{Наименование}" type="optioned" allow-runtime-add="1" visible="visible" > | ||
+ | <type name="Составное" data-type="optioned" multiple="multiple"/> | ||
+ | <title> | ||
+ | <xsl:value-of select="Наименование"/> | ||
+ | </title> | ||
+ | <value/> | ||
+ | </property> | ||
+ | </xsl:for-each> | ||
+ | </group> | ||
+ | </properties> | ||
+ | </page> | ||
+ | </xsl:when> | ||
+ | <xsl:otherwise> | ||
+ | <page id="{Ид}" update-only="1"> | ||
+ | <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:otherwise> | ||
+ | </xsl:choose> | ||
+ | </xsl:template> | ||
+ | |||
+ | <xsl:template match="Предложения/Предложение" mode="entities"> | ||
+ | <xsl:for-each select="ХарактеристикиТовара/ХарактеристикаТовара"> | ||
+ | <entity page-id="{substring-before(../../Ид, '#')}" field-name='{Наименование}'> | ||
+ | <xsl:apply-templates select="///Предложения/Предложение" mode="options"> | ||
+ | <xsl:with-param name="page_id" select="substring-before(../../Ид, '#')"/> | ||
+ | <xsl:with-param name="char_name" select="Наименование"/> | ||
+ | </xsl:apply-templates> | ||
+ | </entity> | ||
+ | </xsl:for-each> | ||
+ | </xsl:template> | ||
+ | |||
+ | <xsl:template match="Предложение" mode="options"> | ||
+ | <xsl:param name="page_id" /> | ||
+ | <xsl:param name="char_name" /> | ||
+ | <xsl:variable name="offer_id" select="substring-after(Ид, '#')"/> | ||
+ | <xsl:variable name="product_id" select="substring-before(Ид, '#')"/> | ||
+ | <xsl:for-each select="ХарактеристикиТовара/ХарактеристикаТовара"> | ||
+ | <xsl:if test="Наименование = $char_name and $page_id = $product_id"> | ||
+ | <option int="1" float="0" object-id="{php:function('md5', concat($offer_id, Значение, Наименование))}"/> | ||
+ | </xsl:if> | ||
+ | </xsl:for-each> | ||
+ | </xsl:template> | ||
+ | |||
+ | </xsl:stylesheet> | ||
+ | </source> | ||
+ | [[category:Интеграция с 1С]][[Категория:Верстка в XSLT]] |
Текущая версия на 13:53, 4 апреля 2014
Актуально для версии 2.9.6
Проблема
Если Вы хотите использовать шаблон из статьи Импорт_характеристик_товаров_из_offers, но структура характеристик в offers у Вас имеет вид:
<ХарактеристикиТовара>
<ХарактеристикаТовара>
<Наименование>Ширина</Наименование>
<Значение>150</Значение>
</ХарактеристикаТовара>
<ХарактеристикаТовара>
<Наименование>Длина</Наименование>
<Значение>300</Значение>
</ХарактеристикаТовара>
</ХарактеристикиТовара>
а не как было рассмотрено:
<ХарактеристикиТовара>
<ХарактеристикаТовара>
<Наименование>Ширина</Наименование>
<Значение>150</Значение>
</ХарактеристикаТовара>
</ХарактеристикиТовара>
<ХарактеристикиТовара>
<ХарактеристикаТовара>
<Наименование>Длина</Наименование>
<Значение>300</Значение>
</ХарактеристикаТовара>
</ХарактеристикиТовара>
То имеющийся шаблон не подойдет, его нужно переделывать, пример ниже.
Шаблон
<?xml version="1.0" encoding="UTF-8"?>
<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="ПакетПредложений">
<meta>
<source-name>commerceML2</source-name>
</meta>
<types>
<type id="root-guides-type" guid="root-guides-type" title="Справочники" parent-id="0" locked="locked">
<base/>
<fieldgroups/>
</type>
<xsl:apply-templates select="Предложения/Предложение" mode="types"/>
</types>
<objects>
<xsl:apply-templates select="Предложения/Предложение" mode="objects"/>
</objects>
<pages>
<xsl:apply-templates select="Предложения/Предложение" mode="pages"/>
</pages>
<options>
<xsl:apply-templates select="Предложения/Предложение" mode="entities"/>
</options>
</xsl:template>
<xsl:key name="guid_name" match="ПакетПредложений/Предложения/Предложение/ХарактеристикиТовара/ХарактеристикаТовара" use="Наименование"/>
<xsl:template match="Предложения/Предложение" mode="types">
<xsl:for-each select="ХарактеристикиТовара/ХарактеристикаТовара">
<xsl:if test="generate-id(.) = generate-id(key('guid_name', Наименование))">
<type parent-id="root-guides-type" guide="guide" public="public">
<xsl:attribute name="id">
<xsl:value-of select="concat('Справочник для поля ', Наименование)"/>
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="concat('Справочник для поля ', Наименование)"/>
</xsl:attribute>
<base/>
<fieldgroups/>
</type>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="Предложения/Предложение" mode="objects">
<xsl:for-each select="ХарактеристикиТовара/ХарактеристикаТовара">
<object id="{php:function('md5', concat(substring-after(../../Ид, '#'), Значение, Наименование))}" name="{Значение}">
<xsl:attribute name="type-id">
<xsl:value-of select="concat('Справочник для поля ', Наименование)"/>
</xsl:attribute>
</object>
</xsl:for-each>
</xsl:template>
<xsl:template match="Предложения/Предложение" mode="pages">
<xsl:choose>
<xsl:when test="contains(Ид, '#')">
<page id="{substring-before(Ид, '#')}">
<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>
<group name="catalog_option_props" title="Опционные свойства" visible="visible">
<xsl:for-each select="ХарактеристикиТовара/ХарактеристикаТовара">
<property name="{Наименование}" type="optioned" allow-runtime-add="1" visible="visible" >
<type name="Составное" data-type="optioned" multiple="multiple"/>
<title>
<xsl:value-of select="Наименование"/>
</title>
<value/>
</property>
</xsl:for-each>
</group>
</properties>
</page>
</xsl:when>
<xsl:otherwise>
<page id="{Ид}" update-only="1">
<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:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="Предложения/Предложение" mode="entities">
<xsl:for-each select="ХарактеристикиТовара/ХарактеристикаТовара">
<entity page-id="{substring-before(../../Ид, '#')}" field-name='{Наименование}'>
<xsl:apply-templates select="///Предложения/Предложение" mode="options">
<xsl:with-param name="page_id" select="substring-before(../../Ид, '#')"/>
<xsl:with-param name="char_name" select="Наименование"/>
</xsl:apply-templates>
</entity>
</xsl:for-each>
</xsl:template>
<xsl:template match="Предложение" mode="options">
<xsl:param name="page_id" />
<xsl:param name="char_name" />
<xsl:variable name="offer_id" select="substring-after(Ид, '#')"/>
<xsl:variable name="product_id" select="substring-before(Ид, '#')"/>
<xsl:for-each select="ХарактеристикиТовара/ХарактеристикаТовара">
<xsl:if test="Наименование = $char_name and $page_id = $product_id">
<option int="1" float="0" object-id="{php:function('md5', concat($offer_id, Значение, Наименование))}"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>