Как не выгружать данные из 1С в определенные поля, если эти поля уже заполнены

Материал из Umicms
Версия от 13:01, 11 июля 2019; Denisov (обсуждение | вклад) (Новая страница: «'''Актуально для версии 20''' == Задача == Проверять, заполнено ли поле на сайте и, если не зап…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Актуально для версии 20

Задача

Проверять, заполнено ли поле на сайте и, если не заполнено — выгружать в него данные, а если заполнено — не выгружать.


Решение

Рассмотрим вариант выполнения нашей задачи на примере поля name.

  1. Открываем файл ~/xsl/import/commerceML2.xsl и копируем из него весь блок в файл ~/xsl/import/custom/commerceML2.xsl <source lang="xml"> <xsl:template match="Группы/Группа" mode="groups"> </source lang="xml"> В скопированном блоке первые несколько строк — описание параметров.
  2. Нам необходимо добавить свои параметры: <source lang="xml"> <xsl:param name="pageId" select="Ид"/> <xsl:param name="nameChecker" select="document(concat('upage://', $pageId))/udata/page/name" /> </source lang="xml">
  3. Теперь у нас есть необходимые данные и можно приступать к описанию логики: <source lang="xml"> <xsl:if test="not(string-length($nameChecker))"> <name><xsl:value-of select="$nameChecker"/></name> </xsl:if> </source lang="xml">
  4. Теперь, при выгрузке каталога из 1С наш кастомный шаблон будет проверять, заполнено поле name на сайте и, если оно пустое — шаблон добавит соответствующую информацию из 1С, а если в поле уже есть какое-либо значение — проигнорирует данные из 1С.
  5. В конечном счёте у вас должен получиться такой код: <source lang="xml"> <xsl:template match="Товары/Товар"> <xsl:param name="group_id" select="string(Группы/Ид)" /> <xsl:param name="pageId" select="Ид"/> <xsl:param name="pageName" select="document(concat('upage://', $pageId))/udata/page/name" /> <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:choose> <xsl:when test="Статус = 'Удален'"> <xsl:attribute name="is-deleted">1</xsl:attribute> </xsl:when> <xsl:when test="$isCatalogItemsRestoreOnImport = 1"> <xsl:attribute name="is-deleted">0</xsl:attribute> </xsl:when> </xsl:choose> <xsl:if test="not(string-length($pageName))"> <name><xsl:value-of select="$pageName"/></name> </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> <xsl:if test="string-length($catalog_item_template)"> <default-template> <xsl:value-of select="$catalog_item_template" /> </default-template> </xsl:if> <properties> <xsl:call-template name="common-group"> <xsl:with-param name="name" select="$name" /> </xsl:call-template> <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> </source lang="xml">