Единственный тип данных Объект каталога, при импорте из 1С
Материал из Umicms
Если по некоторым причинам, вам необходимо, чтобы при импорте данных из 1С использовался только родительский тип «Объект каталога» и не создавались дочерние типы, то необходимо использовать примерно следующий шаблон /xsl/import/custom/commerceML2.xsl, в случае не использования extended-pack:
<?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="Группы/Группа" mode="types"> <!-- do nothing --> </xsl:template> <!-- изменяем шаблон преобразования товара --> <xsl:template match="Товары/Товар"> <xsl:param name="group_id" select="string(Группы/Ид)" /> <xsl:param name="name"> <xsl:choose> <xsl:when test="string-length(ПолноеНаименование)"> <xsl:value-of select="ПолноеНаименование" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="Наименование" /> </xsl:otherwise> </xsl:choose> </xsl:param> <!-- Выставляем тип для всех импортируемых объектов: root-catalog-object-type (Обьект каталога) --> <page id="{Ид}" parentId="{$group_id}" type-id="root-catalog-object-type"> <xsl:if test="Статус = 'Удален'"> <xsl:attribute name="is-deleted">1</xsl:attribute> </xsl:if> <default-active> <xsl:value-of select="$catalog_item_activity" /> </default-active> <default-visible> <xsl:value-of select="$catalog_item_visible" /> </default-visible> <basetype module="catalog" method="object">Объекты каталога</basetype> <name> <xsl:value-of select="$name" /> </name> <xsl:if test="string-length($catalog_item_template)"> <default-template> <xsl:value-of select="$catalog_item_template" /> </default-template> </xsl:if> <properties> <group name="common"> <title>Основные параметры</title> <property name="title" type="string"> <title>Поле TITLE</title> <default-value> <xsl:value-of select="$name" /> </default-value> </property> <property name="h1" type="string"> <title>Поле H1</title> <default-value> <xsl:value-of select="$name" /> </default-value> </property> </group> <group name="product" title="1C: Общие свойства"> <title>1C: Общие свойства</title> <xsl:if test="string-length(Описание)"> <property name="description" title="Описание" type="wysiwyg" visible="visible" allow-runtime-add="1"> <type data-type="wysiwyg" /> <title>Описание</title> <value> <xsl:choose> <xsl:when test="Описание/@ФорматHTML = 'true'"> <xsl:value-of select="Описание"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="php:function('nl2br', string(Описание))" disable-output-escaping="yes" /> </xsl:otherwise> </xsl:choose> </value> </property> </xsl:if> <property name="1c_catalog_id" title="Идентификатор каталога 1С" type="string" allow-runtime-add="1"> <title>Идентификатор каталога 1С</title> <type data-type="string"/> <value> <xsl:value-of select="$catalog-id" /> </value> </property> <property name="1c_product_id" title="Идентификатор в 1С" type="string" allow-runtime-add="1"> <title>Идентификатор в 1С</title> <type data-type="string"/> <value> <xsl:value-of select="Ид" /> </value> </property> <property name="artikul" title="Артикул" type="string" allow-runtime-add="1"> <title>Артикул</title> <type data-type="string"/> <value> <xsl:value-of select="Артикул" /> </value> </property> <property name="bar_code" title="Штрих-код" type="string" allow-runtime-add="1"> <title>Штрих-код</title> <type data-type="string"/> <value> <xsl:value-of select="Штрихкод" /> </value> </property> <property name="weight" title="Вес" type="float" allow-runtime-add="1"> <title>Вес</title> <type data-type="float"/> <value> <xsl:value-of select="ЗначенияРеквизитов/ЗначениеРеквизита[Наименование = 'Вес']/Значение"/> </value> </property> <xsl:apply-templates select="Картинка" /> </group> <xsl:apply-templates select="ЗначенияСвойств" /> </properties> </page> </xsl:template> <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:template match="Товар/Картинка"> <xsl:if test="string-length(.)"> <property name="photo" title="Картинка" type="img_file" visible="visible" allow-runtime-add="1"> <type data-type="img_file"/> <title>Картинка</title> <value>./images/cms/data/<xsl:value-of select="."/></value> </property> </xsl:if> </xsl:template> </xsl:stylesheet>
В случае использования extended-pack, шаблон "ЗначенияСвойств/ЗначенияСвойства" необходимо удалить, т.к. достаточно использовать вариант по умолчанию, тот который в файле /xsl/import/commerceML2.xsl
