Выведем значение дополнительного свойства email:
<xsl:value-of select="property_value[tag_name='email']/value"/>
Вывод ссылки на файл:
<a href="{dir}{property_value[tag_name='file']/file}" target="_blank">Скачать <xsl:value-of select="property_value[tag_name='file']/file_name"/></a>
Показ малого изображения со ссылкой на большое:
<a href="{dir}{property_value[tag_name='file']/file}" target="_blank"><img src="{dir}{property_value[tag_name='file']/file_small}" /></a>
Значения дополнительных свойств выбираются из нескольких таблиц и не имеют порядка сортировки, в отличии от самих дополнительных свойств. Если Вам необходимо выводить значения дополнительных свойств в порядке сортировки свойств, то в XSL-шаблоне необходимо вместо прямого применения шаблона к property_value применять шаблон к property, а из шаблона property применять шаблон к property_value с ограничением по property_id.
<xsl:template match="shop_item">
...
<xsl:apply-templates select="/shop/shop_item_properties//property"/>
...
</xsl:template>
<xsl:template match="property">
<xsl:variable name="property_id" select="@id" />
<xsl:if test="/shop/shop_item/property_value[property_id = $property_id]/value/node() and /shop/shop_item/property_value[property_id = $property_id]/value != '' or /shop/shop_item/property_value[property_id = $property_id]/type != 2">
<tr>
<td><xsl:value-of disable-output-escaping="yes" select="name"/></td>
<xsl:apply-templates select="/shop/shop_item/property_value[property_id = $property_id]" />
</tr>
</xsl:if>
</xsl:template>
<xsl:template match="/shop/shop_item/property_value">
<xsl:variable name="property_id" select="property_id" />
<xsl:variable name="property" select="/shop/shop_item_properties//property[@id=$property_id]" />
<td style="padding: 5px" bgcolor="#F5F5F5">
<xsl:choose>
<xsl:when test="$property/type = 7">
<input type="checkbox" disabled="disabled">
<xsl:if test="value = 1">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>
</input>
</xsl:when>
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="value"/>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:template>
<!-- Шаблон для товара -->
<xsl:template match="shop_item">
...
<xsl:variable name="myItem" select="." />
<xsl:for-each select="/shop/shop_item_properties//property">
<xsl:variable name="propertyId" select="@id" />
<xsl:choose>
<xsl:when test="count($myItem/property_value[property_id = $propertyId])">
<xsl:apply-templates select="$myItem/property_value[property_id = $propertyId]"/>
</xsl:when>
<xsl:otherwise><td></td></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
...
</xsl:template>
Используется при сортировке значений дополнительных свойств при выводе списка товаров. Хук вносится в код типовых динамических страниц и добавляет тег sorting для значений доп. свойств (в примере для значений свойств целого и строчного типа).
if (!$Shop_Controller_Show->item)
{
class Property_Value_Observer
{
static public function onBeforeGetXml($object, $args)
{
$object->addXmlTag('sorting', $object->Property->sorting);
}
}
Core_Event::attach('property_value_string.onBeforeGetXml', array('Property_Value_Observer', 'onBeforeGetXml'));
Core_Event::attach('property_value_int.onBeforeGetXml', array('Property_Value_Observer', 'onBeforeGetXml'));
}
Сортировка значений одного свойства в порядке добавления достигается указанием <xsl:sort select="@id" />, например:
<xsl:for-each select="property_value[tag_name='img'][file !='']">
<xsl:sort select="@id" />
<div class="item">
<a href="{../dir}{file}" class="elevatezoom-gallery" data-image="{../dir}{file}" data-zoom-image="{../dir}{file}">
<img class="img-responsive" height="150" width="100" src="{../dir}{file}"/>
</a>
</div>
</xsl:for-each>