Расширение функционала сравнения товаров (интернет магазин "Современный") — различия между версиями
Материал из Umicms
| Kirill (обсуждение | вклад) | Kirill (обсуждение | вклад)  м (переименовал «Сравнение товаров (интернет магазин "Современный")» в «[[Расширение функционала - сравнение товаров (интернет магазин "Совр) | 
| (нет различий) | |
Версия 07:12, 29 марта 2011
Если Вы используете интернет магазин "Соверменный" в качестве шаблона для своего сайта, то наверняка обратили внимание, что поля визивига и картинки не отображаются при сравнении. Сам шаблон храниться здесь "/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>
