Вывод дополнительного поля из справочника XSLT — различия между версиями
Nasty (обсуждение | вклад) (Новая страница: «'''Задача:''' Есть объект каталога. У него одна из характеристик, задаётся выпадающим списко…») |
(нет различий)
|
Версия 10:29, 17 августа 2010
Задача:
Есть объект каталога. У него одна из характеристик, задаётся выпадающим списком. Значения списка задаются справочником. В справочнике кроме значений, есть также дополнительные поля. Каждому значению соответствует дополнительный параметр. Необходимо вывести дополнительный параметр.
Решение:
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>