Сохранение типов полей из 1С
Материал из Umicms
Если для конфигурации «Управление торговлей» вы не используете extended-pack, то необходимо написать кастомный xsl шаблон импорта, чтобы типы полей в 1С (Выпадающий список, строка, число, дата) сохранились в системе UMI.CMS при импорте данных. Если говорить более точно, речь идет о том, чтобы в модуле «Шаблоны данных», у каждого созданного типа данных (1С:Телефон, 1С:Ноутбук и т.п.) поля Свойств товара имели не Строковый тип, а необходимый вам тип, такой же как был в 1С. Для данной задачи, в файле xsl/import/custom/commerceML2.xsl , в корневом элементе <stylesheet> переназначим шаблон "ЗначенияСвойств/ЗначенияСвойства", который находится в файле xsl/import/commerceML2.xsl. В итоге у нас должен получиться 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="ЗначенияСвойств/ЗначенияСвойства"> <xsl:param name="property" select="key('property', Ид)" /> <xsl:param name="data-type"> <!-- Возможные варианты типов полей: relation, float, boolean, date--> <xsl:choose> <xsl:when test="$property/Наименование = 'Производитель'">relation</xsl:when> <xsl:when test="$property/Наименование = 'Вид товара'">relation</xsl:when> <xsl:when test="$property/Наименование = 'Канал сбыта'">relation</xsl:when> <xsl:otherwise>string</xsl:otherwise> </xsl:choose> </xsl:param> <xsl:if test="$property"> <property name="{$property/Наименование}" title="{$property/Наименование}" type="{$data-type}" visible="visible" is-public="1" allow-runtime-add="1"> <type data-type="{$data-type}" /> <title> <xsl:value-of select="$property/Наименование"/> </title> <value> <xsl:choose> <xsl:when test="$data-type = 'relation'"> <item name="{Значение}" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="Значение" /> </xsl:otherwise> </xsl:choose> </value> </property> </xsl:if> </xsl:template> </xsl:stylesheet>
Суть в том, что необходимо в первом блоке <choose>, вручную указать типы полей, сопоставляя Название поля из 1С с одним из Типов полей: relation, float, boolean, date. Если для какого-либо поля из вкладки Свойства (в 1С) не будет указано соответствие, то поле будет создано с типом Строка (string).
