Для отображения последних комментариев интернет-магазина используйте следующий код
<?php
$shop = new shop();
$xsl = new xsl();
$xslName = 'ОтображениеПоследнихКомментариевИзМагазина';
$shop_id = 1;
$param = array();
$shop_items_catalog_item_id = false;
$param['shop_comment_active'] = 1;
$param['shop_id'] = $shop_id;
$param['comments_begin'] = 0;
$param['comments_count'] = 5;
// Массив комментариев
$mas_comments = $shop->GetAllComments($shop_items_catalog_item_id, $param);
$xmlData = '<?xml version="1.0" encoding="' . SITE_CODING . '"?>' . "\n";
$xmlData .= '<shop>' . "\n";
// Формируем XML с информацией о магазине
$xmlData .= $shop->GenXml4Shop($shop_id);
// Массив для хранения идентификаторов товаров
$mas_catalog_items = array();
$xmlData .= '<comments>' ."\n";
foreach ($mas_comments as $key => $value)
{
$xmlData .= $shop->GenXml4Comment($value['shop_comment_id'], $value);
// Формируем массив товаров, для которых отображаем комментарии
if(!in_array($value['shop_items_catalog_item_id'], $mas_catalog_items))
{
$mas_catalog_items[] = $value['shop_items_catalog_item_id'];
}
}
$xmlData .= '</comments>' ."\n";
$xmlData .= '<items>' . "\n";
$param = array();
$param['xml_show_tying_products']= false;
$param['xml_show_modification'] = false;
$param['xml_show_comments'] = false;
// Цикл по массиву идентификаторов товаров
foreach ($mas_catalog_items as $key => $value)
{
// Получаем информацию о товаре
$item_info = $shop->GetItem($value);
// Формируем XML для товара
$xmlData .= $shop->GenXml4Item(0, $item_info, 0, $param);
}
$xmlData .= '</items>' . "\n";
$xmlData .= '</shop>' . "\n";
//echo nl2br(htmlspecialchars($xmlData));
echo $xsl->build($xmlData, $xslName);
?>
Создайте 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="/">
<xsl:apply-templates select="shop"/>
</xsl:template>
<xsl:template match="shop">
<SCRIPT>
<xsl:comment>
<xsl:text disable-output-escaping="yes">
<![CDATA[
// массив для хранения текущих рейтингов звезд
var curr_rate = new Array();
// функция работы со звездами рейтинга
function set_rate(id, new_rate)
{
// устанавливаем атрибуты
curr_star = document.getElementById(id);
parent_id = parseInt(curr_star.parentNode.id);
// при первом пересчете ставим рейтинг для группы звезд в 0
if (!curr_rate[parent_id])
{
curr_rate[parent_id] = 0;
}
// устанавливаем новый рейтинг в массив рейтингов и значение скрытого поля
if (new_rate != curr_rate[parent_id] && parseInt(new_rate) > 0)
{
curr_rate[parent_id] = new_rate;
curr_form = document.getElementById('comment_form_0' + (parent_id != 0 ? parent_id : ''));
curr_form.shop_comment_grade.value = curr_rate[parent_id].charAt(curr_rate[parent_id].length - 1);
}
// пересчет стилей для звезд
for (i = 1; i < 6; i++)
{
if (parent_id != 0)
{
j = parent_id + '' + i + '_star_' + i;
}
else
{
j = i + '_star_' + i;
}
temp_obj = document.getElementById(j);
if (new_rate == 0)
{
id = curr_rate[parent_id];
}
if (parseInt(j) > parseInt(id))
{
temp_obj.className = '';
}
else
{
temp_obj.className = 'curr';
}
}
}
]]>
</xsl:text>
</xsl:comment>
</SCRIPT>
<!-- Отзывы о товаре -->
<xsl:if test="count(comments/comment) > 0">
<xsl:apply-templates select="comments/comment" />
</xsl:if>
</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">
<a name="comment{@id}"></a>
<div class="comment">
<xsl:variable name="item_id" select="comment_shop_item_id" />
<a href="{/shop/path}{//item[@id = $item_id]/fullpath}{//item[@id = $item_id]/path}/" title="ссылка"><xsl:value-of select="//item[@id = $item_id]/name"/></a>
<div class="tl"></div>
<div class="tr"></div>
<div class="bl"></div>
<div class="br"></div>
<xsl:if test="subject != ''">
<div>
<strong>
<xsl:value-of select="subject"/>
</strong>
</div>
</xsl:if>
<xsl:value-of select="text" disable-output-escaping="yes"/>
<!-- Оценка комментария -->
<xsl:if test="grade != 0">
<div>Оценка:
<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>
</xsl:if>
</div>
<div class="comment_desc">
<xsl:choose>
<xsl:when test="user_name">
<xsl:value-of select="user_name"/>
</xsl:when>
<xsl:otherwise>
<img src="/hostcmsfiles/images/user.gif" style="margin: 0px 5px -4px 0px" />
<b>
<a href="/users/info/{site_user_login}/" class="c_u_l" ><xsl:value-of select="site_user_login"/></a>
</b>
</xsl:otherwise>
</xsl:choose> · <xsl:value-of select="date_time"/>
</div>
</xsl:template>
</xsl:stylesheet>