Расширение функционала сравнения товаров (интернет магазин "Современный") — различия между версиями
Материал из Umicms
Kirill (обсуждение | вклад) |
Mad grant (обсуждение | вклад) |
||
(не показано 5 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | Если Вы используете интернет магазин "Соверменный" в качестве шаблона для своего сайта, то наверняка обратили внимание, что поля визивига и картинки не отображаются при сравнении. | + | Если Вы используете интернет магазин "Соверменный" в качестве шаблона для своего сайта, то наверняка обратили внимание, что поля визивига и картинки не отображаются при сравнении. |
Сам шаблон храниться здесь "/xsltTpls/modules/emarket/compare.xsl" и в нём есть заглушка такого вида: | Сам шаблон храниться здесь "/xsltTpls/modules/emarket/compare.xsl" и в нём есть заглушка такого вида: | ||
Строка 83: | Строка 83: | ||
<!-- конец теста визивиг--> | <!-- конец теста визивиг--> | ||
</source> | </source> | ||
+ | |||
+ | Итоговый вид всего шаблона будет примерно таким: | ||
+ | <source lang="xml"> | ||
+ | <?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> | ||
+ | </source> | ||
+ | [[Категория:Верстка в XSLT]] |
Текущая версия на 20:33, 4 июня 2013
Если Вы используете интернет магазин "Соверменный" в качестве шаблона для своего сайта, то наверняка обратили внимание, что поля визивига и картинки не отображаются при сравнении. Сам шаблон храниться здесь "/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>