Изменение значений полей h1 и title при обновлении данных
Актуально для 2.9.6
По умолчанию, шаблон импорта xsl/import/commerceML2.xsl настроен таким образом, что если в 1С было изменено название номенклатуры ("ПолноеНаименование"), то при обновлении данных, значения полей h1 и title останутся неизменными. Это поведение системы прописаны в шаблоне:
<xsl:template match="Товары/Товар">
...
</xsl:template>
блоком:
<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>
Значение поля (<xsl:value-of select="$name" />) заключено в тэг <default-value>, вместо <value>, поэтому при повторном импорте, для тех свойств, где стоит <default-value>, уже имеющееся значение не будет перезаписываться.
Чтобы значения полей h1 и title все-таки перезаписывались, необходимо шаблон "Товары/Товар" вынести в custom, т.е. в файл /xsl/import/custom/commerceML2.xsl, изменив <default-value> на <value>. В итоге, шаблон /xsl/import/custom/commerceML2.xsl должен быть следующим:
<?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="Товары/Товар">
<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>
<page id="{Ид}" parentId="{$group_id}" type-id="{$group_id}">
<xsl:if test="Статус = 'Удален'">
<xsl:attribute name="is-deleted">1</xsl:attribute>
</xsl:if>
<xsl:if test="not(Группы/Ид)">
<xsl:attribute name="parentId">
<xsl:value-of select="$catalog-id" />
</xsl:attribute>
<xsl:attribute name="type-id">root-catalog-object-type</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>
<value>
<xsl:value-of select="$name" />
</value>
</property>
<property name="h1" type="string">
<title>Поле H1</title>
<value>
<xsl:value-of select="$name" />
</value>
</property>
</group>
<group name="product">
<title>1C: Общие свойства</title>
<xsl:if test="string-length(Описание)">
<property name="description" title="Описание" type="wysiwyg" 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" type="string">
<title>Идентификатор каталога 1С</title>
<value>
<xsl:value-of select="$catalog-id" />
</value>
</property>
<property name="1c_product_id" type="string">
<title>Идентификатор в 1С</title>
<value>
<xsl:value-of select="Ид" />
</value>
</property>
<property name="artikul" type="string">
<title>Артикул</title>
<value>
<xsl:value-of select="Артикул" />
</value>
</property>
<property name="bar_code" type="string">
<title>Штрих-код</title>
<value>
<xsl:value-of select="Штрихкод" />
</value>
</property>
<property name="weight" type="float">
<title>Вес</title>
<value>
<xsl:value-of select="ЗначенияРеквизитов/ЗначениеРеквизита[Наименование = 'Вес']/Значение"/>
</value>
</property>
<xsl:apply-templates select="Картинка" />
</group>
<xsl:apply-templates select="ЗначенияСвойств" />
</properties>
</page>
</xsl:template>
</xsl:stylesheet>