О дополнительных изображениях

Модератор
#
Re: О дополнительных изображениях
compaq писал(а):
но если одно поле не заполено то выводится вместо этой картинки шаблон пустой без картинки.

очень просто:
<xsl:when test="type = '1' and file_path != ''">...


compaq писал(а):
и вдогонку вопрос как сделать — почти тоже самое, но если свойство не заполнено то вывести информацию например «нет фото»

Добавить условие, что если путь пустой, то вывести картинку, например добавить еще один when в choose:
<xsl:when test="type = '1' and file_path = ''">
<img src="..." />
</xsl:when>
#
Re: О дополнительных изображениях

HostCMS, чтобы отредактировать страницу я открываю ее код, вношу изменения, но сохранить их естественно не могу. Уточните пожалуйста, как нужно сделать.
И еще, что-бы задавать размеры окна большого изображения я должен каждую страниу править, где есть дополнительные изображения?

Спасибо.
Модератор
#
Re: О дополнительных изображениях
vasilev писал(а):
HostCMS, чтобы отредактировать страницу я открываю ее код, вношу изменения, но сохранить их естественно не могу. Уточните пожалуйста, как нужно сделать.

В странице Вы можете посмотреть результат, а редактировать в данном случае нужно XSL-шаблон. В нем вызывается наша функция, которая показывает окно с картинкой, в нее передаются параметры.

vasilev писал(а):
И еще, что-бы задавать размеры окна большого изображения я должен каждую страниу править, где есть дополнительные изображения?

Зачем править? По умолчанию у Вас сразу все должно работать. покажите страницу, на которой у Вас не работает открытие в новом окне с правильными размерами.
#
Re: О дополнительных изображениях
HostCMS писал(а):
Добавить условие, что если путь пустой, то вывести картинку, например добавить еще один when в choose:
<xsl:when test="type = '1' and file_path = ''">
<img src="..." />
</xsl:when>


добавил но резалта ноль

за первое огромное спасибо - все ок
..


привожу кусок кода вызова


   <div class="right_item_main">
      

         <!-- Выводим список дополнительных свойств -->
      <div class="right_item_photo">
         <xsl:apply-templates select="property[@xml_name = 'item_photo']"/><br />
         <xsl:apply-templates select="property[@xml_name = 'item_photos']" mode="photos"/>
         </div>
         <div class="right_item_text">
         <xsl:if test="count(modifications/item) &gt; 0">
         <p>Модификации:&#160;<b><xsl:apply-templates select="modifications/item"/></b></p></xsl:if><br />
      <xsl:if test="marking_of_goods != ''">
            <p>Артикул:&#160;<b><xsl:value-of disable-output-escaping="yes" select="marking_of_goods"/></b></p><br />
            <p>Текущая цена:&#160;
               <xsl:choose>
                  <xsl:when test="price != 0">
                     <b><xsl:value-of select="format-number(price, '###.##0,00', 'my')"/>&#xA0;<xsl:value-of select="currency" disable-output-escaping="yes"/></b>
                  </xsl:when>
                  <xsl:otherwise><b>договорная</b></xsl:otherwise>
               </xsl:choose></p>
         </xsl:if><br />
         <p><xsl:if test="rest &gt; 0">
         В наличии:&#160;<b><xsl:value-of disable-output-escaping="yes" select="rest"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="mesure"/></b>
         </xsl:if></p><br /><br />
           </div>   <div class="clear"></div>
         <div class="desc"> <xsl:value-of disable-output-escaping="yes" select="description" /></div>
         <!-- Текст товара -->
         <div class="har"><xsl:value-of disable-output-escaping="yes" select="text"/></div>


      </div>



шаблон


<!-- Шаблон вывода дополнительных свойств -->
  
<xsl:template match="property">
<xsl:choose>
<xsl:when test="type = '1'"><a href="{file_path}"
      class="highslide" onclick="return hs.expand(this)"><img src="{small_image/file_path}" alt=""  /></a>
      <div class="highslide-heading">
       Фотографии модели
</div>
         </xsl:when>
         <xsl:when test="type = '1' and file_path = ''">
тест
</xsl:when>
</xsl:choose>
</xsl:template>


<xsl:template match="property" mode="photos">
<xsl:choose>
<xsl:when test="type = '1'and file_path != ''"><a href="{file_path}" class="highslide"
        onclick="return hs.expand(this)"><img src="{small_image/file_path}" alt="" class="small"/></a>
        <div class="highslide-heading">
</div>
            </xsl:when>

</xsl:choose>
</xsl:template>



правда здесь при вызове  xml_name = 'item_photo'
если пустое поле то ничего и не выводится
с этим тегом у меня одно свойство


то есть со вторым тегом(item_photos) у меня было наборот почти - с пустым полем выводился пустой шаблон
добавили проверку с вашей помощью и теперт ничего не выводится

а с первым вот не понял ничего.
ку
#
Re: О дополнительных изображениях
HostCMS писал (а):
"Зачем править? По умолчанию у Вас сразу все должно работать. покажите страницу, на которой у Вас не работает открытие в новом окне с правильными размерами."

Привожу страницу: http://chelznak.ru/shop/tying_products/item_316/
при нажатии на дополнительном изображении, оно открывается в новом большом окне.

Спасибо.  
#
Re: О дополнительных изображениях
vasilev, приведите код XSL-шаблона для вывода товара.
#
Re: О дополнительных изображениях
Привожу еще раз:

<?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"/>
   
   <xslecimal-format name="my" decimal-separator="," grouping-separator="."/>
   
   <xsl:template match="/shop">
      <xsl:apply-templates select="item"/>
   </xsl:template>
   
   <xsl:template match="item">
      
      <SCRIPT>
         <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>"+title+"</title>";
                     
                  obj.document.write("</head>";
                  
                  obj.document.write("<body topmargin=0 leftmargin=0 marginwidth=0 marginheight=0>";
                     
                     obj.document.write("<img src=\""+src+"\" />&nbsp;";
                     
                  obj.document.write("</body>";
               obj.document.write("</html>";
               }
               ]]>
            </xsl:text>
         </xsl:comment>
      </SCRIPT>
      
      <div>
         <h1>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </h1>
      </div>
      <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
      <xsl:variable name="parent_group_id" select="/shop/@current_group_id"/>
      
      <xsl:if test="$parent_group_id = 0">
         <a href="{/shop/path}">
            <xsl:value-of disable-output-escaping="yes" select="/shop/name"/>
         </a>
      </xsl:if>
      
      <!-- Путь к группе -->
      <xsl:apply-templates select="//group[@id=$parent_group_id]" mode="goup_path"/>
      
      <span class="path_arrow">&#x2192;</span>
      <b>
         <a href="{/path}">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </a>
      </b>
      
      <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>
      
      <div>
         <!-- Изображение для товара, если есть -->
         <xsl:if test="small_image != ''">
            <div style="float: left; width: {small_image/@width}px; margin: 0px 10px 10px 0px; color: #aaaaaa;">
               <a href="{image}" target="blank_" onclick="ShowImgWindow('{name}','{image}', {image/@width}, {image/@height}); return false;">
                  <img src="{small_image}" style="border: 1px solid #DADADA; margin: 0px 5px 5px 0px"/>
               </a>
               <br/>
               <a href="{image}" target="blank_" onclick="ShowImgWindow('{name}','{image}', {image/@width}, {image/@height}); return false;">
                  <img src="/hostcmsfiles/images/zoom.gif" alt="Увеличить" />
               </a>
            </div>
         </xsl:if>
         
         <!-- Цена товара -->
         <p>Цена:
            <span style="font-size: 11pt; font-weight: bold">
               <xsl:choose>
                  <xsl:when test="price != 0">
                     <xsl:value-of select="format-number(price, '###.##0,00', 'my'"/>&#xA0;<xsl:value-of select="currency" disable-output-escaping="yes"/>
                  </xsl:when>
                  <xsl:otherwise>договорная</xsl:otherwise>
               </xsl:choose>
            </span>
            
            <!-- Если цена со скидкой - выводим ее -->
            <xsl:if test="price != price_tax">
               &#xA0;
               <span style="color: #777">
                  <strike>
                     <xsl:value-of select="price_tax"/>&#xA0;<xsl:value-of select="currency" disable-output-escaping="yes"/>
                  </strike>
               </span>
            </xsl:if>
         </p>
         
         <xsl:if test="marking_of_goods != ''">
         <p>Артикул: <b><xsl:value-of disable-output-escaping="yes" select="marking_of_goods"/></b></p>
         </xsl:if>
         
         <xsl:if test="producer/name != ''">
         <p>Производитель: <b><xsl:value-of disable-output-escaping="yes" select="producer/name"/></b></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) &gt; 0">
            <xsl:apply-templates select="discount"/>
         </xsl:if>
         
         <!-- Показываем количество на складе, если больше нуля -->
         <xsl:if test="rest &gt; 0">
            <p>В наличии: <xsl:value-of disable-output-escaping="yes" select="rest"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="mesure"/></p>
         </xsl:if>
         
         <!-- Ссылка на добавление в корзину -->
         <p>
            <input type="text" size="3" value="1" id="count_{@id}"/>
            <a href="{/shop/path}cart/?action=add&amp;item_id={@id}" onclick="return AddIntoCart({/shop/path},{@id},document.getElementById('count_{@id}'.value)">
               <img alt="В корзину" title="В корзину" src="/hostcmsfiles/images/cart.gif" style="margin: 0px 0px -4px 10px" /></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:if test="count(tags/tag) &gt; 0">
         <p>
            <img src="/hostcmsfiles/images/tags.gif" align="left" style="margin: 0px 5px -2px 0px"/>
            <xsl:apply-templates select="tags/tag"/>
         </p>
      </xsl:if>
      
      <!-- Выводим список дополнительных свойств -->
      <xsl:apply-templates select="property"/>
      
      <!-- Модификации -->
      <xsl:if test="count(modifications/item) &gt; 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) &gt; 0">
         <p>
            <b>Сопутствующие товары:</b>
         </p>
         <!-- Отображаем сопутствующие товары -->
         <xsl:apply-templates select="tying/item"/>
      </xsl:if>
      
      <!-- Отзывы о товаре
      <xsl:if test="comments/grade_count &gt; 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;" rows="7">
                     <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="tags/tag">
      <a href="{/shop/path}tag/{tag_path_name}/" class="tag">
         <xsl:value-of select="tag_name"/>
      </a>
   <xsl:if test="position() != last()">,</xsl:if>&#xA0;</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 &gt; ceiling($current_grade))">
            
            <xsl:if test="$current_grade - 1 &gt; 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 &gt; ceiling($current_grade))">
            
            <xsl:if test="$current_grade - 0.5 &gt; 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 &gt; $i and $n &gt; 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">
      <p>
         <xsl:value-of disable-output-escaping="yes" select="name"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="value"/>%
      </p>
   </xsl:template>
   
   <!-- Шаблон вывода дополнительных свойств -->
   <xsl:template match="property">
      <p>
         <xsl:choose>
      <xsl:when test="type = '1'"><b><xsl:value-of disable-output-escaping="yes" select="name"/>:</b>&#xA0;<a href="JavaScript:void(0)" onclick="ShowImgWindow('{name}','{file_path}'"><img src="{small_image/file_path}"/></a></xsl:when>
            <xsl:otherwise>
               <b><xsl:value-of disable-output-escaping="yes" select="name"/>:</b>&#xA0;<xsl:value-of disable-output-escaping="yes" select="value"/>
            </xsl:otherwise>
         </xsl:choose>
      </p>
   </xsl:template>
   
   <xsl:template match="tying/item">
      
      <div style="clear: both">
         <p>
            <a href="{/shop/path}{fullpath}{path}/">
               <xsl:value-of 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) &gt; 0">
            <xsl:apply-templates select="discount"/>
         </xsl:if>
         
         <!-- Показываем количество на складе, если больше нуля -->
         <xsl:if test="rest &gt; 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:variable name="parent_id" select="@parent"/>
      
      <!-- Выбираем рекурсивно вышестоящую группу -->
      <xsl:apply-templates select="//group[@id=$parent_id]" mode="goup_path"/>
      
      <xsl:if test="@parent=0">
         <a href="{/shop/path}">
            <xsl:value-of select="/shop/name"/>
         </a>
      </xsl:if>
      
      <span class="path_arrow">&#x2192;</span>
      
      <a href="{/shop/path}{fullpath}">
         <xsl:value-of select="name"/>
      </a>
   </xsl:template>
</xsl:stylesheet>
#
Re: О дополнительных изображениях
vasilev, причина проблемы в том, что при выводе изображения из доп. свойства:
<a href="JavaScript:void(0)" onclick="ShowImgWindow ('{name}','{file_path}')"><img src="{small_image/file_path}"/></a>

в функцию ShowImgWindow передается два параметра: имя и путь. Хотя можно передать еще два: ширину и высоту этого изображения(функция это позволяет). Попробуйте их передать для формирования соответствующего изображению размеров всплывающего окна.
#
Re: О дополнительных изображениях
Я включил еще параметры габарит:
<a href="JavaScript:void(0)" onclick="ShowImgWindow('{name}','{file_path}','{image/@width}', {'image/@height}'"><img src="{small_image/file_path}"/>, но большое изображение теперь и вовсе не открывается.
Почему?
#
Re: О дополнительных изображениях
c моей ситуацией поможете?
спасибо
ку
Авторизация