Вопрос по "дополнительные свойства товара"

#
Вопрос по "дополнительные свойства товара"
Здравствуйте, спасибо за CMS!

У меня не получается добавить дополнительную картинку к товару. Я завожу дополнительное свойство. Загружаю дополнительное фото, но на странице товара выдает только "Дополнительное изображение: shop_property_file_64_2.jpg".
Вопрос: как его высветить маленьким, ссылкой на большое?

Свойство допустим называется "more_pic" и имеее id=2

Что откопал:
<!-- Выводим список дополнительных свойств -->
<xsl:apply-templates select="//property"/>

А вот как пользоваться
<xsl:value-of select="property[@xml_name = 'FIELD_NAME']/file_path"/>
<xsl:value-of select="property[@xml_name = 'FIELD_NAME']/small_image/file_path"/>
не могу разобраться =(
Модератор
#
Re: Вопрос по "дополнительные свойства товара"
Можно, например, вот так:
<a href="/{property[@xml_name = 'FIELD_NAME']/file_path}">Мой файл</a>
Можно также вместо "Мой файл" вывести оригинальное имя файла
#
Re: Вопрос по "дополнительные свойства товара"
У меня так и не получилось вывести дополнительное свойство, доп. изображение к товару. Не понимаю как формируется путь к файлу. Ссылка http://fieri.ru/shop/shkaf_kupe/verona/shkaf_kupe/verona/

выводится только Дополнительное изображение: shop_property_file_63_2.jpg

а вот как это трансформировать в маленькую картинку-ссылку доп. изображения я не понимаю.

в документации написано

Для внедрения в XSL значений свойств используютс следующие конструкции:
Для большой картинки:
<xsl:value-of select="property[@xml_name = 'FIELD_NAME']/file_path"/>
Для малой картинки:
<xsl:value-of select="property[@xml_name = 'FIELD_NAME']/small_image/file_path"/>
Вместо FIELD_NAME необходимо указать имя поля.

а где брать это имя поля? подскажите, я всю голову уже сломал...

#
Re: Вопрос по "дополнительные свойства товара"
Вот тоже возник подобный вопрос.
Имеем стандартно:
<xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/description"/>
Все работает, но понадобилось выводить дополнительное свойство группы, и какой путь прописывать?
<xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/group_property/description"/>
не работает. Какой должен быть путь к дополнительным свойствам групп?
Модератор
#
Re: Вопрос по "дополнительные свойства товара"
Linwood,
в 4.0 дополнительных св-в групп у магазина нет, у ИС есть.
Всегда в процессе работы просматривайте XML - в нем есть все, что доступно для работы в XSL.

ivolkov писал(а):
а где брать это имя поля? подскажите, я всю голову уже сломал...

Вы его задаете, когда создаете дополнительное св-во. Отредактируйте св-во и посмотрте его имя.
#
Re: Вопрос по "дополнительные свойства товара"
Тогда уточню вопрос
Используется информационная система "Каталог товаров"
Необходимо вывести дополнительное свойство с именем xml_name=test (для примера). По аналогии с выводом дополнительных свойств товара пишу:
<xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/propertys/property/test"/>
не работает. Хотя такая строка:
<xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/description"/>
Выводит описание из свойств группы.
Вот кусок XML который я получаю при загрузке страницы:

<propertys>
<property type="Any" xml_name="test" id="18" value_id="48">
<name>Описание новостройки</name>
<value>Это описание которое я никак не могу ввывести!!!!!!!</value>
<default_value></default_value>
<order>0</order>
</property>

Такая стока:
<xsl:value-of select="propertys/property[@xml_name='test']/value" />
тоже не срабатывает. В чем я не прав?
#
Re: Вопрос по "дополнительные свойства товара"
Ну вот вроде сам разобрался. Надо было прописать полный путь:
<xsl:value-of disable-output-escaping="yes" select="blocks/group[@id=$parent_group_id]/propertys/property[@xml_name='test']/value" />
и все будет работать.
Спасибо за отличный движок. Это просто мечта программера
Модератор
#
Re: Вопрос по "дополнительные свойства товара"
Дополнение к документации:

Работа с дополнительными свойствами групп информационной системы
Для получения дополнительного свойства текстового/числового типа используется следующая конструкция:
<xsl:value-of disable-output-escaping="yes" select=" //group[@id=$parent_group_id]/propertys/property[@xml_name='XML_ИМЯ_СВОЙСТВА']/value"/>
Константа $parent_group_id должна содержит идентификатор группы.
Модератор
#
Re: Вопрос по "дополнительные свойства товара"
Linwood писал(а):
Спасибо за отличный движок. Это просто мечта программера

Спасибо за добрые слова!
#
Re: Вопрос по "дополнительные свойства товара"
Просидел весь день в изучение документации, но решения так и не нашел =(

я добавил свойство pict1 (дополнительно изображение к добавляемому товару)
Вопрос: как вывести само изображение?

код:

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />

<xsl:template match="/shop">
   <xsl:apply-templates select="item"/>
</xsl:template>


<xsl:template match="item">

   
      <xsl:comment>
         <xsl:text disable-output-escaping="yes">
         <![CDATA[
         function ShowImgWindow(title, src, width, height)
         {
            obj = window.open("", "", "scrollbars=0,dialog=0,minimizable=1,modal=1,width="+width+",height="+height+",resizable=0";
            obj.document.write("<html>";
            obj.document.write("<head>";
         
            obj.document.write(""+title+"";
         
            obj.document.write("</head>";
         
            obj.document.write("<body topmargin=0 leftmargin=0 marginwidth=0 marginheight=0>";
         
            obj.document.write("<img src=\""+src+"\" />";
         
            obj.document.write("</body>";
            obj.document.write("</html>";
         }
         ]]>
         </xsl:text>
      </xsl:comment>
   

   <div style="float: left">
   <h1><xsl:value-of disable-output-escaping="yes" select="name"/></h1>
   </div>

   <div style="float: left; margin: 20px 0px 0px 20px">
   <!-- Средняя оценка товара -->
   <xsl:if test="comments/average_grade/node()">
      <xsl:call-template name="show_average_grade">
         <xsl:with-param name="grade" select="comments/average_grade"/>
         <xsl:with-param name="const_grade" select="5"/>
      </xsl:call-template>
   </xsl:if>
   </div>

   <div style="clear: both"></div>
   
   <!-- Информация об ошибках -->
   <xsl:variable name="error_code" select="/shop/error" />
   
   <xsl:if test="$error_code != 0">
      <div id="error"><b>Внимание!</b> Неправильно введен код подтвержения!</div>   
   </xsl:if>
   
   <xsl:if test="not(/shop/error/node()) and /shop/comment_is_active/node()">
      <!-- Информация о выполненном действии -->
      <div style="border: 1px solid #dadada; padding: 10px; width: 400px">
      <b>
      <xsl:choose>
      <xsl:when test="/shop/comment_is_active = '0'">
         Комментарий успешно добавлен и будет опубликован после проверки модератором!
      </xsl:when>
      <xsl:otherwise>
         Комментарий успешно добавлен и опубликован!
      </xsl:otherwise>
      </xsl:choose>
      </b>
      </div>   
   </xsl:if>
   
   
   
   <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
   <xsl:variable name="parent_group_id" select="@current_group_id"/>

<!-- Путь к группе -->
           
<xsl:apply-templates select="//group[@id=$parent_group_id]" mode="goup_path"/>

<!--
<span class="path_arrow">&#8594;</span>
<b><a href="/{path}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></b>
<br/><br/>
-->
<div>

   <!-- Изображение для товара, если есть -->
   <xsl:if test="small_image != ''">
   
      <div style="float: left; width: {small_image/@width}px; margin: 0px 10px 10px 0px; color: #aaaaaa;">
         
         <a href="JavaScript:void(0)" onclick="ShowImgWindow('{name}','{image}', {image/@width}, {image/@height})"><img src="{small_image}" style="border: 1px solid #000000; margin: 0px 5px 5px 0px" /></a><br/><a href="JavaScript:void(0)" onclick="ShowImgWindow('{name}','{image}', {image/@width}, {image/@height})">увеличить</a>
      
      </div>
   
   </xsl:if>
         
      <p>
      </p>
      
      <!-- Цена товара -->
      <p>Цена:
         <strong>
            <xsl:choose>
               <xsl:when test="price != 0">
                  <xsl:value-of disable-output-escaping="yes" select="price"/>&#xA0;
                  <!-- Валюта товара -->
                  <xsl:value-of disable-output-escaping="yes" select="currency"/>
               </xsl:when>
               <xsl:otherwise>на заказ</xsl:otherwise>
            </xsl:choose>
         </strong>
      </p>
   
      <!-- Если цена со скидкой - выводим ее -->
      <xsl:if test="price!=price_tax">
      <p>
      <font color="gray">
         <strike>
            <xsl:value-of select="price_tax"/>&#xA0;<xsl:value-of select="currency"/>
         </strike>
      </font>
      </p>
      </xsl:if>
      
      <!-- Если указан вес товара -->
      <xsl:if test="weight != 0">
         <p>Вес товара: <xsl:value-of select="weight"/>&#xA0;<xsl:value-of select="weight_mesure"/></p>
      </xsl:if>

      <!-- Показываем скидки -->
      <xsl:if test="count(discount) > 0">
         <xsl:apply-templates select="discount"/>
      </xsl:if>
      
      <!-- Показываем количество на складе, если больше нуля -->
      <xsl:if test="rest > 0">
         <p>В наличии: <xsl:value-of disable-output-escaping="yes" select="rest"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="mesure"/></p>
      </xsl:if>

      <xsl:if test="producer/name != ''">
         <p>Производитель: <xsl:value-of disable-output-escaping="yes" select="producer/name"/></p>
      </xsl:if>
      
      <!-- Ссылка на добавление в корзину
      <p><a href="/shop/cart/?action=add&amp;item_id={@id}">В корзину</a></p> -->
      
         <!-- Описание товара -->
   <!-- <p><xsl:value-of disable-output-escaping="yes" select="description"/></p> -->

   <p><xsl:value-of disable-output-escaping="yes" select="text"/></p>
      
      <div style="clear: both;"></div>
      
   </div>

   <!-- Выводим список дополнительных свойств -->


   <xsl:apply-templates select="//property"/>


   
   <!-- Модификации -->
   <xsl:if test="count(modifications/item) > 0">
      <b>Модификации:</b>
      <table cellspacing="3" cellpadding="3" style="margin-left: -6px;">
      <tr>
         <td style="border-bottom: 1px solid #dadada;">Название</td>
         <td style="border-bottom: 1px solid #dadada;">Цена</td>
      </tr>
      <xsl:apply-templates select="modifications/item"/>
      </table>
   </xsl:if>   

   <xsl:if test="count(tying/item) > 0">
      <p><b>Сопутствующие товары:</b></p>
      <!-- Отображаем сопутствующие товары -->
      <xsl:apply-templates select="tying/item"/>
   </xsl:if>
   
   <!-- Отзывы о товаре -->
   <xsl:if test="comments/grade_count > 0">
      <h2>Отзывы о товаре</h2>
      <xsl:apply-templates select="comments/comment"/>
   </xsl:if>
   
   <div style="clear: both">
   <h2>Ваша оценка и комментарий к данному товару</h2>
   </div>
   
   <form method="post" action="./">
   <table cellspacing="5">
   <tr>
      <td>Имя пользователя</td>
      <td>
         <input type="text" name="shop_comment_user_name" style="width:25em;" value="{/shop/shop_comment_user_name}">
         </input>
      </td>
   </tr>
   <tr>
      <td>Тема комментария</td>
      <td>
         <input type="text" name="shop_comment_subject" style="width:25em;" value="{/shop/shop_comment_subject}" />
      </td>
   </tr>
   <tr>
      <td>Текст комментария</td>
      <td>
         <textarea name="shop_comment_text" style="width:25em;">
         <xsl:value-of disable-output-escaping="yes" select="/shop/shop_comment_text"/>
         </textarea>
      </td>
   </tr>
   <tr>
      <td>Оценка товара</td>
      <td>
         <xsl:call-template name="for">
            <xsl:with-param name="n" select="5"/>
         </xsl:call-template>
      </td>
   </tr>
   <tr>
      <td>Код подтверждения</td>
      <td>
      <div style="float: left">
         <img style="border: 1px solid #BAB188" src="/captcha.php?get_captcha={captcha_key}" title="Введите число изображенное на картинке" alt="CAPTCHA" />
      </div>
      <div style="float: left; margin: 9px 0px 0px 10px;">
         <input type="hidden" name="captcha_key" value="{captcha_key}" />
         <input type="hidden" name="shop_items_catalog_item_id" value="{@id}" />
         <input style="width:86px;" type="text" name="captcha_keystring" />
      </div>
      </td>
   </tr>
   <tr>
      <td></td>
      <td>
         <input name="submit_comment" value="Добавить отзыв" type="submit"/>
      </td>
   </tr>   
   </table>
   </form>
</xsl:template>

<!-- Шаблон для модификаций -->
<xsl:template match="modifications/item">
   <tr>
      <td>
         <!-- Название модификации -->
         <a href="{/shop/path}{fullpath}{path}/"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
      </td>
      <td>
         <!-- Цена модификации -->
         <xsl:value-of disable-output-escaping="yes" select="price"/>&#xA0;
         <!-- Валюта -->
         <xsl:value-of disable-output-escaping="yes" select="currency"/>         
      </td>
   </tr>
</xsl:template>

<!-- Вывод рейтинга товара -->
<xsl:template name="show_average_grade">
   <xsl:param name="grade" select="0"/>
   <xsl:param name="const_grade" select="0"/>   
   
   <!-- Чтобы избежать зацикливания -->
   <xsl:variable name="current_grade" select="$grade * 1" />
   
   <xsl:choose>
      <!-- Если число целое -->
      <xsl:when test="floor($current_grade) = $current_grade and not($const_grade > ceiling($current_grade))">
         
         <xsl:if test="$current_grade - 1 > 0">
            <xsl:call-template name="show_average_grade">
               <xsl:with-param name="grade" select="$current_grade - 1"/>
               <xsl:with-param name="const_grade" select="$const_grade - 1"/>
            </xsl:call-template>
         </xsl:if>
         
         <xsl:if test="$current_grade != 0">
         <img src="/hostcmsfiles/images/stars_single.gif" />
         </xsl:if>
      </xsl:when>
      <xsl:when test="$current_grade != 0 and not($const_grade > ceiling($current_grade))">
      
         <xsl:if test="$current_grade - 0.5 > 0">
            <xsl:call-template name="show_average_grade">
               <xsl:with-param name="grade" select="$current_grade - 0.5"/>
               <xsl:with-param name="const_grade" select="$const_grade - 1"/>
            </xsl:call-template>
         </xsl:if>
         
         <img src="/hostcmsfiles/images/stars_half.gif" />
      </xsl:when>
      
      <!-- Выводим серые звездочки, пока текущая позиция не дойдет то значения, увеличенного до целого -->
      <xsl:otherwise>
         <xsl:call-template name="show_average_grade">
            <xsl:with-param name="grade" select="$current_grade"/>
            <xsl:with-param name="const_grade" select="$const_grade - 1"/>
         </xsl:call-template>
         <img src="/hostcmsfiles/images/stars_gray.gif" />
      </xsl:otherwise>
   </xsl:choose>
</xsl:template>
   
<!-- Шаблон для вывода звездочек (оценки) -->
<xsl:template name="for">
   <xsl:param name="i" select="0"/>
   <xsl:param name="n"/>
   
   <input type="radio" name="shop_comment_grade" value="{$i}" id="id_shop_comment_grade_{$i}">
      <xsl:if test="/shop/shop_comment_grade = $i">
         <xsl:attribute name="checked"> </xsl:attribute>
      </xsl:if>
   </input>
   &#xa0;<label for="id_shop_comment_grade_{$i}">
   <xsl:call-template name="show_average_grade">
      <xsl:with-param name="grade" select="$i"/>
      <xsl:with-param name="const_grade" select="5"/>
   </xsl:call-template>   
   </label><br />   
   <xsl:if test="$n > $i and $n > 1">
      <xsl:call-template name="for">
         <xsl:with-param name="i" select="$i + 1"/>
         <xsl:with-param name="n" select="$n"/>
      </xsl:call-template>   
   </xsl:if>
</xsl:template>

<!-- Шаблон для отзывов -->
<xsl:template match="comments/comment">
   <b><xsl:value-of select="subject"/></b>
   &#xA0;(<xsl:value-of select="user_name"/>
   <xsl:value-of select="date_time"/>
   <xsl:call-template name="show_average_grade">
      <xsl:with-param name="grade" select="grade"/>
      <xsl:with-param name="const_grade" select="5"/>
   </xsl:call-template>
   <div style="background: #F5F5F7; padding: 3px;">
   <xsl:value-of select="text"/><br />
   </div><br />
</xsl:template>

<!-- Шаблон для скидки -->
<xsl:template match="discount">
   <br/>
   <xsl:value-of disable-output-escaping="yes" select="name"/>
   &#xA0;<xsl:value-of disable-output-escaping="yes" select="value"/>%
</xsl:template>

<!-- Шаблон вывода дополнительных свойств -->

<xsl:template match="property">
   <p>
   <b>
   <xsl:value-of disable-output-escaping="yes" select="name"/>
   :
   </b>
   <xsl:value-of disable-output-escaping="yes" select="value"/>
   <br/>
   </p>
</xsl:template>



<xsl:template match="tying/item">

<div style="clear: both">
   <p>
   <a href="/shop/{fullpath}{path}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
   </p>
   
   <!-- Изображение для товара, если есть -->
   <xsl:if test="small_image != ''">
      <a href="{/shop/path}{fullpath}{path}/"><img src="{small_image}" align="left" style="border: 1px solid #000000; margin: 0px 5px 5px 0px" /></a>
   </xsl:if>
   
   <p><xsl:value-of disable-output-escaping="yes" select="description"/></p>
   
   <!-- Цена товара -->
   <strong>
      <xsl:choose>
         <xsl:when test="price != 0">
            <xsl:value-of disable-output-escaping="yes" select="price"/>&#xA0;
            <!-- Валюта товара -->
            <xsl:value-of disable-output-escaping="yes" select="currency"/>
         </xsl:when>
         <xsl:otherwise>договорная</xsl:otherwise>
      </xsl:choose>
   </strong>

   <!-- Если цена со скидкой - выводим ее -->
   <xsl:if test="price!=price_tax">
   <br/>
   <font color="gray">
      <strike>
         <xsl:value-of disable-output-escaping="yes" select="price_tax"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="currency"/>
      </strike>
   </font>
   </xsl:if>
   
   <!-- Если указан вес товара -->
   <xsl:if test="weight != 0">
      <br/>Вес товара: <xsl:value-of select="weight"/> <xsl:value-of select="weight_mesure"/>
   </xsl:if>

   <!-- Показываем скидки -->
   <xsl:if test="count(discount) > 0">
      <xsl:apply-templates select="discount"/>
   </xsl:if>
   
   <!-- Показываем количество на складе, если больше нуля -->
   <xsl:if test="rest > 0">
      <br/>В наличии: <xsl:value-of disable-output-escaping="yes" select="rest"/>
   </xsl:if>

   <xsl:if test="producer/name != ''">
      <br/>Производитель: <xsl:value-of disable-output-escaping="yes" select="producer/name"/>
   </xsl:if>
</div>

</xsl:template>

<!-- ======================================================== -->
<!-- Шаблон выводит рекурсивно ссылки на группы инф. элемента -->
<!-- ======================================================== -->

<xsl:template match="group" mode="goup_path">
   <xsl:param name="parent_id" select="@parent"/>
   
   <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
   <xsl:param name="parent_group_id" select="/shop/@current_group_id"/>

   <xsl:apply-templates select="//group[@id=$parent_id]" mode="goup_path"/>

   <xsl:if test="@parent=0">
      <a href="{/shop/path}"><xsl:value-of disable-output-escaping="yes" select="/shop/name"/></a>
   </xsl:if>

   <img src="/images/arrow_path.gif" class="arrow_path"/>

   <!-- ============================================================================================== -->
   <!-- Если ID группы, для которой выводим список элементов, равен ID текущей группы - выводим жирным -->
   <!-- ============================================================================================== -->
   <xsl:if test="$parent_group_id=@id">
      <a href="{/shop/path}{fullpath}"><b><xsl:value-of disable-output-escaping="yes" select="name"/></b></a>
   </xsl:if>

   <!-- ============================ -->
   <!-- Иначе выводим обычную ссылку -->
   <!-- ============================ -->
   <xsl:if test="$parent_group_id!=@id">
      <a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
   </xsl:if>

</xsl:template>

</xsl:stylesheet>
Авторизация