Импорт опционных свойств из 1С
Материал из Umicms
Версия от 09:45, 14 марта 2014; Mad grant (обсуждение | вклад)
По данному вопрос есть более актуальная статья - Импорт характеристик товаров из offers
Если вам необходимо при импорте данных из 1С, чтобы создавался один товар с набором опционных свойств, то необходимо переписать xsl шаблон импорта. Можно воспользоваться следующим вариантом шаблона /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="ПакетПредложений">
<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>
<type id='Справочник для поля "Предложения"' title='Справ. для поля "Предложения"' parent-id="root-guides-type" guide="guide" public="public">
<base/>
<fieldgroups/>
</type>
</types>
<objects>
<xsl:apply-templates select="Предложения/Предложение" mode="objects"/>
</objects>
<pages>
<xsl:apply-templates select="Предложения/Предложение" />
</pages>
<options>
<xsl:apply-templates select="Предложения/Предложение" mode="options-entity"/>
</options>
</xsl:template>
<xsl:template match="Предложения/Предложение" mode="objects"/>
<xsl:template match="Предложения/Предложение[contains(Ид, '#')]" mode="objects">
<object id="{substring-after(Ид,'#')}" name="{Наименование}" type-id='Справочник для поля "Предложения"'>
<properties>
<group name="product_properties" title="Характеристики товара">
<xsl:apply-templates select="ХарактеристикиТовара/ХарактеристикаТовара" mode="options-property"/>
</group>
</properties>
</object>
</xsl:template>
<xsl:template match="ХарактеристикиТовара/ХарактеристикаТовара" mode="options-property">
<property name="{Наименование}" type="relation" is-public="1" visible="visible" allow-runtime-add="1">
<type data-type="relation" />
<title><xsl:value-of select="Наименование"/></title>
<value>
<item name="{Значение}"/>
</value>
</property>
</xsl:template>
<xsl:template match="Предложения/Предложение" mode="options-entity"/>
<xsl:template match="Предложения/Предложение[not(contains(Ид, '#'))]" mode="options-entity">
<entity page-id="{Ид}" field-name="Предложения">
<xsl:apply-templates select="//Предложения/Предложение" mode="options">
<xsl:with-param name="page-id" select="Ид" />
</xsl:apply-templates>
</entity>
</xsl:template>
<xsl:template match="Предложение" mode="options">
<xsl:param name="page-id"/>
<xsl:if test="contains(Ид, '#') and contains(Ид, $page-id)">
<option int="1" float="0" object-id="{substring-after(Ид,'#')}"/>
</xsl:if>
</xsl:template>
<xsl:template match="Предложения/Предложение"/>
<xsl:template match="Предложения/Предложение[not(contains(Ид, '#'))]">
<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>
<group name="catalog_option_props" title="Опционные свойства" visible="visible">
<property name="Предложения" type="optioned" allow-runtime-add="1" visible="visible" >
<type data-type="optioned" multiple="multiple"/>
<title>Предложения</title>
<value/>
</property>
</group>
</properties>
</page>
</xsl:template>
</xsl:stylesheet>
После импорта все варианты опций будут лежать в одном типе данных с общими полями для всех, но если опционные поля, которые в кастомном файле называются "Предложения", заполняются исключительно из 1С, то неудобств это доставить не должно.
Имя поля, в которое записываются опции, и имя группы, в которой находится это поле, в шаблоне можно изменить.
Версия 2.8.6.1 Создано при полном содействии отдела разработки