Отзывы в интернет-магазине
1. При добавлении отзыва к товару - отзыв не появляется на главной странице администрирования сайта (а отзывы к новостям появляются).
2. Если указана предпроверка перед публикацией, то администратор может только догадаться зайти на этот товар и пройдя путь
(Список интернет-магазинов → Демонстрационный магазин → Видеокамеры → Список отзывов о товаре "DCR-HC38"
активировать данный отзыв? (хотя меня мучают подозрения что возможно в данном пункте - отправляется письмо на мыло куратору магазина...)
3. По этому же пути предусмотрена возможность добавления отзыва к этому товару через панель администрирования - но текст отзыва появляется с тэгами абзаца.
--------------------------------------------
HostCMS.Free (update до 5.0.8.zip, 20.06.2008)
2. Если указана предпроверка перед публикацией, то администратор может только догадаться зайти на этот товар и пройдя путь
(Список интернет-магазинов → Демонстрационный магазин → Видеокамеры → Список отзывов о товаре "DCR-HC38"
активировать данный отзыв? (хотя меня мучают подозрения что возможно в данном пункте - отправляется письмо на мыло куратору магазина...)3. По этому же пути предусмотрена возможность добавления отзыва к этому товару через панель администрирования - но текст отзыва появляется с тэгами абзаца.
--------------------------------------------
HostCMS.Free (update до 5.0.8.zip, 20.06.2008)
Rainman, по пунктам 1-2: вывод последних комментариев на главной странице центра администрирования и отправку писем планируется реализовать в ближайшее время(будет доступно в обновлениях).
По п.3 - отредактируйте XSL-шаблон "МагазинТовар" и вместо:
используйте:
По п.3 - отредактируйте XSL-шаблон "МагазинТовар" и вместо:
<!-- Шаблон для отзывов -->
<xsl:template match="comments/comment">
...
<xsl:value-of select="text"/>
...
</xsl:template>
<xsl:template match="comments/comment">
...
<xsl:value-of select="text"/>
...
</xsl:template>
используйте:
<!-- Шаблон для отзывов -->
<xsl:template match="comments/comment">
...
<xsl:value-of disable-output-escaping="yes" select="text"/>
...
</xsl:template>
<xsl:template match="comments/comment">
...
<xsl:value-of disable-output-escaping="yes" select="text"/>
...
</xsl:template>
natalya писал(а):
Тестим систему отображения отзывов на интернет-магазине:
1.Отзыв отображается на главной странице центра - но перейти к нему нельзя.
2.При оставлении только текста комментария - все равно выставляется минимальная оценка (пять пустых звездочек, хотя
- на среднюю оценку по товару она не влияет и это правильно
- зато она отображается рядом с комментарием а это не правильно, так как получается, напримар, отзыва - ВСЕ отлично и рядом красуется оценка ОЧЕНЬ ПЛОХО-пять пустых звездочек)
3.Последовательность действий
а) добавляем отзыв к товару - пишем только тему, идет на модерацию, модерация одобрено, на странице товара - не отображается; добавляем следующий отзыв с оценкой, одобряем модератором, - показываются уже оба.
б)тоже самое, только сразу отзыв с оценком, а потом с темой - отображается все ок, т.е сразу оценка, а потом и следующий отзыв с темой.
Так что пока наверно будет постмодерация...
вывод последних комментариев на главной странице центра администрирования и отправку писем планируется реализовать в ближайшее время(будет доступно в обновлениях).
Тестим систему отображения отзывов на интернет-магазине:
1.Отзыв отображается на главной странице центра - но перейти к нему нельзя.
2.При оставлении только текста комментария - все равно выставляется минимальная оценка (пять пустых звездочек, хотя
- на среднюю оценку по товару она не влияет и это правильно
- зато она отображается рядом с комментарием а это не правильно, так как получается, напримар, отзыва - ВСЕ отлично и рядом красуется оценка ОЧЕНЬ ПЛОХО-пять пустых звездочек)
3.Последовательность действий
а) добавляем отзыв к товару - пишем только тему, идет на модерацию, модерация одобрено, на странице товара - не отображается; добавляем следующий отзыв с оценкой, одобряем модератором, - показываются уже оба.
б)тоже самое, только сразу отзыв с оценком, а потом с темой - отображается все ок, т.е сразу оценка, а потом и следующий отзыв с темой.
Так что пока наверно будет постмодерация...
Rainman,
1. изначально был реализован показ ссылки на все комментарии в случае, если их больше 5. Сейчас вносятся исправления, чтобы ссылка "Другие комментарии" отображалась вне зависимости от их количества.
2. отображение звездочек(например, пустых) вы можете убрать самостоятельно из XSL-шаблона.
3.а - б. не удалось воссоздать проблему. Обновления установлены без пропусков?
1. изначально был реализован показ ссылки на все комментарии в случае, если их больше 5. Сейчас вносятся исправления, чтобы ссылка "Другие комментарии" отображалась вне зависимости от их количества.
2. отображение звездочек(например, пустых) вы можете убрать самостоятельно из XSL-шаблона.
3.а - б. не удалось воссоздать проблему. Обновления установлены без пропусков?
natalya писал(а):
С нуля, потом обновления все по порядку (там где объедененные - ставил их).
Могу дать адрес сайта и доступ.
И еще сюда же - я так понимаю должно приходить письмо куратору магазина о поступлении отзыва/оценки товара? Если такого нет - то неплохо было бы добавить.
natalya писал(а):
попробую.
3.а - б. не удалось воссоздать проблему. Обновления установлены без пропусков?
С нуля, потом обновления все по порядку (там где объедененные - ставил их).
Могу дать адрес сайта и доступ.
И еще сюда же - я так понимаю должно приходить письмо куратору магазина о поступлении отзыва/оценки товара? Если такого нет - то неплохо было бы добавить.
natalya писал(а):
2. отображение звездочек(например, пустых) вы можете убрать самостоятельно из XSL-шаблона.
попробую.
Rainman, сообщите адрес сайта и данные доступа к разделу администрирования на адрес службы тех. поддержки.
При поступлении отзыва о товаре соответствующее письмо куратору магазина по умолчанию не приходит. Вы можете дописать данный функционал в тип. дин. страницу для магазина самостоятельно.
При поступлении отзыва о товаре соответствующее письмо куратору магазина по умолчанию не приходит. Вы можете дописать данный функционал в тип. дин. страницу для магазина самостоятельно.
Как вообще отключить возможность добавление отзывов о товаре (кроме выкашивания формы из XSL шаблона)?
CCron, форму добавления отзыва не обязательно удалять из XSL-шаблона. Можно добавить ее внутрь определенного условия(если форма не нужна, то условие должно быть невыполнимое).
Rainman писал(а):
Вообщем я понял зависимость не появления комментария
"Если оценка 0, то комментарий не отображается"
А это ведь неверно, так как пользователь может оставить только текст комментария - без оценки.
3.Последовательность действий
а) добавляем отзыв к товару — пишем только тему, идет на модерацию, модерация одобрено, на странице товара — не отображается; добавляем следующий отзыв с оценкой, одобряем модератором, — показываются уже оба.
б) тоже самое, только сразу отзыв с оценком, а потом с темой — отображается все ок, т.е сразу оценка, а потом и следующий отзыв с темой.
Так что пока наверно будет постмодерация…
а) добавляем отзыв к товару — пишем только тему, идет на модерацию, модерация одобрено, на странице товара — не отображается; добавляем следующий отзыв с оценкой, одобряем модератором, — показываются уже оба.
б) тоже самое, только сразу отзыв с оценком, а потом с темой — отображается все ок, т.е сразу оценка, а потом и следующий отзыв с темой.
Так что пока наверно будет постмодерация…
Вообщем я понял зависимость не появления комментария
"Если оценка 0, то комментарий не отображается"
А это ведь неверно, так как пользователь может оставить только текст комментария - без оценки.
Rainman, для решения проблемы обновите код XSL-шаблона "МагазинТовар" на этот (или если меняли его, поменяйте только выделенный фрагмент):
<?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:decimal-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+"\" />");
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">→</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')"/> <xsl:value-of select="currency" disable-output-escaping="yes"/>
</xsl:when>
<xsl:otherwise>договорная</xsl:otherwise>
</xsl:choose>
</span>
<!-- Если цена со скидкой - выводим ее -->
<xsl:if test="price != price_tax">
 
<span style="color: #777">
<strike>
<xsl:value-of select="price_tax"/> <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"/> <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"/> <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&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>
<xsl:if test="count(//property) > 0">
<h2>Атрибуты товара</h2>
<xsl:if test="count(property[@dir_id = 0])">
<table border="0">
<xsl:apply-templates select="property[@dir_id = 0]"/>
</table>
</xsl:if>
<xsl:apply-templates select="/shop/properties_items_dir"/>
</xsl:if>
</div>
<!-- Тэги для информационного элемента -->
<xsl:if test="count(tags/tag) > 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: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="count(comments/comment) > 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="properties_items_dir">
<p><b><xsl:value-of select="shop_properties_items_dir_name"/></b></p>
<xsl:variable name="dir_id" select="@id"/>
<xsl:if test="count(//property[@dir_id = $dir_id])">
<table border="0">
<xsl:apply-templates select="//property[@dir_id = $dir_id]"/>
</table>
</xsl:if>
<xsl:if test="count(properties_items_dir) > 0">
<blockquote>
<xsl:apply-templates select="properties_items_dir"/>
</blockquote>
</xsl:if>
</xsl:template>
<!-- Вывод строки со значением свойства -->
<xsl:template match="property">
<tr>
<td style="padding: 5px" bgcolor="#E5DFDA">
<b><xsl:value-of select="name"/></b>
</td>
<td style="padding: 5px" bgcolor="#E5DFDA">
<xsl:choose>
<xsl:when test="type = 1">
<a href="{file_path}">Скачать файл</a>
</xsl:when>
<xsl:when test="type = 7">
<xsl:choose>
<xsl:when test="value = 1">
<input type="checkbox" checked="" disabled="" />
</xsl:when>
<xsl:otherwise>
<input type="checkbox" disabled="" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="value"/>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</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> 
</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"/> 
<!-- Валюта -->
<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> 
<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> 
(<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: #E5DFDA; padding: 3px;">
<xsl:value-of disable-output-escaping="yes" select="text"/>
<br/>
</div>
<br/>
</xsl:template>
<!-- Шаблон для скидки -->
<xsl:template match="discount">
<p>
<xsl:value-of disable-output-escaping="yes" select="name"/> <xsl:value-of disable-output-escaping="yes" select="value"/>%
</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"/> 
<!-- Валюта товара -->
<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"/> <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: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">→</span>
<a href="{/shop/path}{fullpath}">
<xsl:value-of select="name"/>
</a>
</xsl:template>
</xsl:stylesheet>
<!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:decimal-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+"\" />");
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">→</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')"/> <xsl:value-of select="currency" disable-output-escaping="yes"/>
</xsl:when>
<xsl:otherwise>договорная</xsl:otherwise>
</xsl:choose>
</span>
<!-- Если цена со скидкой - выводим ее -->
<xsl:if test="price != price_tax">
 
<span style="color: #777">
<strike>
<xsl:value-of select="price_tax"/> <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"/> <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"/> <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&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>
<xsl:if test="count(//property) > 0">
<h2>Атрибуты товара</h2>
<xsl:if test="count(property[@dir_id = 0])">
<table border="0">
<xsl:apply-templates select="property[@dir_id = 0]"/>
</table>
</xsl:if>
<xsl:apply-templates select="/shop/properties_items_dir"/>
</xsl:if>
</div>
<!-- Тэги для информационного элемента -->
<xsl:if test="count(tags/tag) > 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: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="count(comments/comment) > 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="properties_items_dir">
<p><b><xsl:value-of select="shop_properties_items_dir_name"/></b></p>
<xsl:variable name="dir_id" select="@id"/>
<xsl:if test="count(//property[@dir_id = $dir_id])">
<table border="0">
<xsl:apply-templates select="//property[@dir_id = $dir_id]"/>
</table>
</xsl:if>
<xsl:if test="count(properties_items_dir) > 0">
<blockquote>
<xsl:apply-templates select="properties_items_dir"/>
</blockquote>
</xsl:if>
</xsl:template>
<!-- Вывод строки со значением свойства -->
<xsl:template match="property">
<tr>
<td style="padding: 5px" bgcolor="#E5DFDA">
<b><xsl:value-of select="name"/></b>
</td>
<td style="padding: 5px" bgcolor="#E5DFDA">
<xsl:choose>
<xsl:when test="type = 1">
<a href="{file_path}">Скачать файл</a>
</xsl:when>
<xsl:when test="type = 7">
<xsl:choose>
<xsl:when test="value = 1">
<input type="checkbox" checked="" disabled="" />
</xsl:when>
<xsl:otherwise>
<input type="checkbox" disabled="" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="value"/>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</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> 
</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"/> 
<!-- Валюта -->
<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> 
<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> 
(<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: #E5DFDA; padding: 3px;">
<xsl:value-of disable-output-escaping="yes" select="text"/>
<br/>
</div>
<br/>
</xsl:template>
<!-- Шаблон для скидки -->
<xsl:template match="discount">
<p>
<xsl:value-of disable-output-escaping="yes" select="name"/> <xsl:value-of disable-output-escaping="yes" select="value"/>%
</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"/> 
<!-- Валюта товара -->
<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"/> <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: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">→</span>
<a href="{/shop/path}{fullpath}">
<xsl:value-of select="name"/>
</a>
</xsl:template>
</xsl:stylesheet>
Авторизация