Использование выпадающего списка с множественным выбором

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

В некоторых конфигурациях 1С возможно указать в справочнике несколько значений, это может быть информация о том, в каких магазинах находится товар. В самом файле import.xml, в узле Товар/ЗначенияСвойств, значения могут быть представлены в следующем виде:

<ЗначенияСвойства>
  <Ид>00002</Ид>
  <Наименование>Аптеки</Наименование>
  <Значение>Аптека №1</Значение>
  <Значение>Аптека №2</Значение>
  <Значение>Аптека №3</Значение>
  <Значение>Аптека №4</Значение>
  <Значение>Аптека №5</Значение>
  <Значение>Аптека №9</Значение>
</ЗначенияСвойства>

Чтобы при импорте данных, было создано поле "Аптеки", типа "Выпадающий список с множественным выбором", и чтобы у каждого объекта каталога были выбраны соответствующие Аптеки, необходимо настроить XSL-шаблон импорта: \xsl\import\custom\commerceML2.xsl

В данный шаблон, из файла \xsl\import\commerceML2.xsl можно скопировать блок:

<xsl:template match="ЗначенияСвойств/ЗначенияСвойства">
...
</xsl:template>


и нужным образом настроить, один из вариантов (+ дополнительный шаблон) может быть таким:

<xsl:template match="ЗначенияСвойств/ЗначенияСвойства">
  <xsl:param name="property" select="key('property', Ид)" />
  <xsl:param name="value-id" select="string(ИдЗначения)" />
  <xsl:param name="data-type">
    <xsl:choose>
      <xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Число'">float</xsl:when>
      <xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Булево'">boolean</xsl:when>
      <xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Дата'">date</xsl:when>
      <xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Справочник'">relation</xsl:when>
      <xsl:otherwise>string</xsl:otherwise>
    </xsl:choose>
  </xsl:param>
  <xsl:choose>
    <xsl:when test="Наименование = 'Аптеки'">
      <property name="{$property/Наименование}" title="{$property/Наименование}" type="relation" is-public="1" allow-runtime-add="1">
        <type data-type="relation" multiple="multiple" />
        <title>
          <xsl:value-of select="$property/Наименование"/>
        </title>
        <value>
          <xsl:apply-templates select="Значение" mode="relation-multiple-value" />
        </value>
      </property>
    </xsl:when>
    <xsl:otherwise>
      <xsl:if test="$property">
        <property name="{$property/Наименование}" title="{$property/Наименование}" type="{$data-type}" 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'">
                <xsl:apply-templates select="$property/ТипыЗначений/ТипЗначений/ВариантыЗначений/ВариантЗначения[Ид = $value-id]" mode="relation-value" />
              </xsl:when>
              <xsl:otherwise>
                <xsl:value-of select="Значение" />
              </xsl:otherwise>
            </xsl:choose>
          </value>
        </property>
      </xsl:if>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template match="Значение" mode="relation-multiple-value">
  <item name="{.}" />
</xsl:template>


Основное, на что необходимо обратить внимание, это на атрибут multiple="multiple", в узле type:

<type data-type="relation" multiple="multiple" />