Импорт опционных свойств из 1С

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


По данному вопрос есть более актуальная статья - Импорт характеристик товаров из 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 Создано при полном содействии отдела разработки