Вывод дополнительного поля из справочника XSLT

Материал из Umicms
Версия от 19:51, 4 июня 2013; Mad grant (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Задача:

Есть объект каталога. У него одна из характеристик, задаётся выпадающим списком. Значения списка задаются справочником. В справочнике кроме значений, есть также дополнительные поля. Каждому значению соответствует дополнительный параметр. Необходимо вывести дополнительный параметр.

Решение:

1. Вызываем объекты каталога, например с использованием %catalog getObjectsList()%. Реализация:

 <xsl:apply-templates select="document('udata://catalog/getObjectsList//60')/udata/lines/item" mode="test" />

В приведённой выше строке 60 - это id раздела каталога, дополнительные параметры объектов которого необходимо вывести. В этом пункте можно использовать любой другой необходимы вызов объектов каталога.

2. Создаём шаблон, в котором будут обрабатываться свойства.

<xsl:template match="item" mode="test">
</xsl:template>

3. Внутри шаблона нам необходимо:

а) получить id значения, которое указано в поля типа "Выпадающий список" для конкретного объекта каталога. Его можно получить, например, используя upage и id-объекта.

б) вызвать объект соответствующий id значения, которое указано в поле типа "Выпадающий список". Его можно вызвать, например, с использованием uobject.

в) получить необходимое значение, например использовать xsl:value-of select. Пример реализации:

  <xsl:variable name="test1" select="document(concat('upage://', @id,'.pole_dlya_testov'))/udata/property/value/item/@id"/>
  <xsl:value-of select="document(concat('uobject://', $test1))/udata/object/properties/group/property/value"/>

В этом примере test1 - это переменная. Первое @id - это id-объекта каталога. Второе @id - это id-значения указанного в поле типа "Выпадающий список". pole_dlya_testov - это идентификатор поля типа "Выпадающий список".

Итог:

<xsl:apply-templates select="document('udata://catalog/getObjectsList//60')/udata/lines/item" mode="test" />
<xsl:template match="item" mode="test">
  <xsl:variable name="test1" select="document(concat('upage://', @id,'.pole_dlya_testov'))/udata/property/value/item/@id"/>
  <xsl:value-of select="document(concat('uobject://', $test1))/udata/object/properties/group/property/value"/>
</xsl:template>