Расширение функционала сравнения товаров (интернет магазин "Современный")
Материал из Umicms
Версия от 09:11, 7 марта 2011; Kirill (обсуждение | вклад)
Если Вы используете интернет магазин "Соверменный" в качестве шаблона для своего сайта, то наверняка обратили внимание, что поля визивига и картинки не отображаются при сравнении. Сам шаблон храниться здесь "/xsltTpls/modules/emarket/compare.xsl" и в нём есть заглушка такого вида:
<xsl:template match="field[@type = 'wysiwyg' or @type = 'img_file' or @type = 'symlink']" mode="compare" />
Чтобы отображались все поля, необходимо внешний вид заглушки привести к такому
<xsl:template match="field[@type = 'symlink']" mode="compare" />
и добавить эти два шаблона:
<!-- начало теста картинка -->
<xsl:template match="field[@type = 'img_file']" mode="compare" disable-output-escaping="yes">
<tr>
<td class="name">
<xsl:value-of select="@title" />
</td>
<xsl:apply-templates select="values/item" mode="compare2" />
</tr>
</xsl:template>
<xsl:template match="item" mode="compare2">
<td>
<a href="{@link}" class="image">
<xsl:call-template name="catalog-thumbnail">
<xsl:with-param name="element-id" select="@id" />
<xsl:with-param name="field-name">photo</xsl:with-param>
<xsl:with-param name="width">115</xsl:with-param>
<xsl:with-param name="height">90</xsl:with-param>
</xsl:call-template>
</a>
</td>
</xsl:template>
<!-- конец теста картинка-->
<!-- начало теста визивиг -->
<xsl:template match="field[@type = 'wysiwyg']" mode="compare" disable-output-escaping="yes">
<tr>
<td class="name">
<xsl:value-of select="@title" />
</td>
<xsl:apply-templates select="values/item" mode="compare3" disable-output-escaping="yes"/>
</tr>
</xsl:template>
<xsl:template match="item" mode="compare3">
<td>
<xsl:value-of select="value/value" disable-output-escaping="yes"/>
</td>
</xsl:template>
<!-- конец теста визивиг-->
Итоговый вид всего шаблона будет примерно таким:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/constants.dtd:file">
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:umi="http://www.umi-cms.ru/TR/umi">
<xsl:template match="udata[@method = 'getCompareList']" />
<xsl:template match="udata[@method = 'getCompareList'][count(items/item) > 0]">
<div class="infoblock">
<div class="title">
<h2>
<xsl:text>&compare-title;</xsl:text>
</h2>
</div>
<div class="body">
<div class="in">
<ul class="compare">
<xsl:apply-templates select="items/item" />
</ul>
<xsl:if test="count(items/item) > 1">
<a href="{$lang-prefix}/emarket/compare/" class="button">
<xsl:text>&compare-submit;</xsl:text>
</a>
</xsl:if>
</div>
</div>
</div>
</xsl:template>
<xsl:template match="udata[@method = 'getCompareList']/items/item">
<li>
<a href="{$lang-prefix}/emarket/removeFromCompare/{@id}/" class="del" />
<a href="{@link}" class="title" title="{.}" umi:element-id="{@id}" umi:field-name="name">
<xsl:value-of select="." />
</a>
</li>
</xsl:template>
<xsl:template match="udata[@method = 'getCompareLink']/add-link">
<a href="{.}" class="compare">
<xsl:text>&compare-add;</xsl:text>
</a>
</xsl:template>
<xsl:template match="udata[@method = 'getCompareLink']/del-link">
<a href="{.}" class="compare">
<xsl:text>&compare-del;</xsl:text>
</a>
</xsl:template>
<xsl:template match="/result[@method = 'compare']">
<xsl:apply-templates select="document('udata://emarket/compare')" />
</xsl:template>
<xsl:template match="udata[@method = 'compare']">
<div class="catalog">
<table class="compare">
<thead>
<tr>
<th />
<xsl:apply-templates select="headers/items/item" mode="compare-header" />
</tr>
</thead>
<tbody>
<tr>
<td class="name"></td>
<xsl:apply-templates select="headers/items/item" mode="compare-photo" />
</tr>
<tr>
<td class="name">
<xsl:text>&price;</xsl:text>
</td>
<xsl:apply-templates select="headers/items/item" mode="compare-price" />
</tr>
<xsl:apply-templates select="fields/field" mode="compare" />
</tbody>
<tfoot>
<td />
<xsl:apply-templates select="headers/items/item" mode="compare-sale" />
</tfoot>
</table>
</div>
</xsl:template>
<xsl:template match="headers/items/item" mode="compare-header">
<th>
<a href="{@link}" class="title">
<xsl:value-of select="." />
</a>
</th>
</xsl:template>
<xsl:template match="headers/items/item" mode="compare-photo">
<td>
<a href="{@link}" class="image">
<xsl:call-template name="catalog-thumbnail">
<xsl:with-param name="element-id" select="@id" />
<xsl:with-param name="field-name">photo</xsl:with-param>
<xsl:with-param name="width">115</xsl:with-param>
<xsl:with-param name="height">90</xsl:with-param>
</xsl:call-template>
</a>
</td>
</xsl:template>
<xsl:template match="headers/items/item" mode="compare-price">
<td>
<div class="price">
<span>
<xsl:apply-templates select="document(concat('udata://emarket/price/', @id))" />
</span>
</div>
</td>
</xsl:template>
<xsl:template match="headers/items/item" mode="compare-sale">
<xsl:variable name="is_options">
<xsl:choose>
<xsl:when test="document(concat('upage://', @id))//group[@name = 'catalog_option_props']/property">
<xsl:value-of select="true()" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="false()" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<td>
<a href="{$lang-prefix}/emarket/basket/put/element/{@id}/"
id="add_basket_{@id}" class="button"
onclick="frontEndBasket.addFromList('{@id}', {$is_options}); return false;">
<xsl:text>&basket-add;</xsl:text>
</a>
</td>
</xsl:template>
<xsl:template match="field[@type = 'symlink']" mode="compare" />
<!-- начало теста картинка -->
<xsl:template match="field[@type = 'img_file']" mode="compare" disable-output-escaping="yes">
<tr>
<td class="name">
<xsl:value-of select="@title" />
</td>
<xsl:apply-templates select="values/item" mode="compare2" />
</tr>
</xsl:template>
<xsl:template match="item" mode="compare2">
<td>
<a href="{@link}" class="image">
<xsl:call-template name="catalog-thumbnail">
<xsl:with-param name="element-id" select="@id" />
<xsl:with-param name="field-name">photo</xsl:with-param>
<xsl:with-param name="width">115</xsl:with-param>
<xsl:with-param name="height">90</xsl:with-param>
</xsl:call-template>
</a>
</td>
</xsl:template>
<!-- конец теста картинка-->
<!-- начало теста визивиг -->
<xsl:template match="field[@type = 'wysiwyg']" mode="compare" disable-output-escaping="yes">
<tr>
<td class="name">
<xsl:value-of select="@title" />
</td>
<xsl:apply-templates select="values/item" mode="compare3" disable-output-escaping="yes"/>
</tr>
</xsl:template>
<xsl:template match="item" mode="compare3">
<td>
<xsl:value-of select="value/value" disable-output-escaping="yes"/>
</td>
</xsl:template>
<!-- конец теста визивиг-->
<xsl:template match="field" mode="compare" disable-output-escaping="1">
<tr>
<td class="name">
<xsl:value-of select="@title" />
</td>
<xsl:apply-templates select="values/item" mode="compare" disable-output-escaping="1"/>
</tr>
</xsl:template>
<xsl:template match="item" mode="compare">
<td>
<xsl:apply-templates select="value" disable-output-escaping="1"/>
</td>
</xsl:template>
</xsl:stylesheet>