Использование выпадающего списка с множественным выбором
Материал из 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" />
