Вывод в XSL и сортировка значений свойств

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

Выведем значение дополнительного свойства 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.

Вариант 1

<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>

Вариант 2

   <!-- Шаблон для товара -->
   <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>

Вариант 3

Используется при сортировке значений дополнительных свойств при выводе списка товаров. Хук вносится в код типовых динамических страниц и добавляет тег sort для значений доп. свойств (в примере для значений свойств целого и строчного типа).

Не путайте добавляемый тег sort с тегом sorting, в котором указывается внутренний порядок сортировки множественных значений свойства.
if (!$Shop_Controller_Show->item)
{
    class Property_Value_Observer
    {
        static public function onBeforeGetXml($object, $args)
        {
           $object->addXmlTag('sort', $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'));    
}

Вариант 4

Сортировка значений одного свойства в порядке добавления достигается указанием <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>

Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.

Комментарии

  • Вариант 3 сортировка

    т.к. у занчения свойства теперь есть свое поле sorting, то при таком названии тэга в xml он будет как дубль и не будет работать, нужно переименовать, во что то отличное от стандратного названия поля, например "sort"

    19.05.2023 08:37:49
    alexpimnev

    Без темы

    Спасибо, поправили.

    22.05.2023 16:20:12
    hostcms
  • Дополнительное свойство группы товаров

    Не выводит полную ссылку а только название файла из дополнительного свойства группы товаров интернет магазина
    Скачать

    10.02.2017 06:53:26
    andrei.balkin
    andrei.balkin

    Без темы

    Смотрите у родительского элемента (informationsystem_item или shop_item) будет тег dir с нужным путем.

    10.02.2017 08:47:45
    hostcms
  • По группам я реализовал так

    19.08.2016 13:26:13
    sopdu

    доп св-во группы магазина

    вставляем в XLS-шаблон

    12.10.2016 20:11:50
    tatyanin
  • Без темы

    а по группам есть пример?

    28.08.2015 22:37:02
    alexpimnev