private:koding:hostcms:modules:shop:useful:compare-products

Сравнение товаров. Вывод всех характеристик или только отличий.

1. В XSL - шаблонах, в разделе Интернет - магазин изменяем шаблон СравнениеТоваров. Добавляем код в основной шаблон, формирующий таблицу сравнения (xsl:template match="shop"). Между кодом:

<h1>Сравнение товаров</h1>

и

<div id="sticky" class="sticky-element">
	<div class="sticky-anchor"></div>
	<div class="sticky-content">
		<table class="shop_cart shop_cart_compare">
			<tr>
				<th>Название</th>
				<xsl:apply-templates select="comparing/shop_item" mode="name"/>
			</tr>
			<tr>
				<th>Фото</th>
				<xsl:apply-templates select="comparing/shop_item" mode="image"/>
			</tr>
			<tr>
				<th>Цена</th>
				<xsl:apply-templates select="comparing/shop_item" mode="price"/>
			</tr>										
		</table>
	</div>
</div>

вставить:

<xsl:if test="different = 0">
	Все характеристики
	<a href="?diff=1">Отличия</a>
</xsl:if>	
<xsl:if test="different = 1">
	<a href="/shop/compare_items/">Все характеристики</a>
	Отличия
</xsl:if>

2. Из шаблона формирующего свойства (xsl:template match="property") удалить код:

<!-- Есть хотя бы одно значение свойства -->
		<xsl:variable name="property_id" select="@id" />
		<xsl:if test="count(/shop/comparing/shop_item/property_value[property_id=$property_id][not(file/node()) and value != '' or file != ''])">
			<tr>
				<th>
				<xsl:value-of disable-output-escaping="yes" select="name"/><xsl:if test="description !=''"><xsl:text> </xsl:text><img src="/acvideo/css/img/tooltip.png" data-tooltip="{description}"/></xsl:if>
				</th>
				<xsl:apply-templates select="/shop/comparing/shop_item" mode="property">
					<!-- Передаем через параметр ID свойства -->
					<xsl:with-param name="property_id" select="@id"/>
				</xsl:apply-templates>
			</tr>
		</xsl:if>

и вставить:

<xsl:variable name="property_id" select="@id" />
 
		<!-- Есть хотя бы одно значение свойства -->
 
		<xsl:if test="count(/shop/comparing/shop_item/property_value[property_id=$property_id][not(file/node()) and value != '' or file != ''])">
 
			<xsl:variable name="first_value">
				<xsl:for-each select="/shop/comparing/shop_item[1]/property_value[property_id=$property_id]">
					<xsl:value-of disable-output-escaping="yes" select="value"/>
				</xsl:for-each>
			</xsl:variable>
			<xsl:variable name="result">
				<xsl:for-each select="/shop/comparing/shop_item">
 
					<xsl:variable name="result2">
						<xsl:for-each select="property_value[property_id=$property_id]">
							<xsl:value-of disable-output-escaping="yes" select="value"/>
						</xsl:for-each>
					</xsl:variable>
 
					<xsl:if test="$result2 != $first_value">
						1
					</xsl:if>
 
				</xsl:for-each>
			</xsl:variable>
 
			<xsl:if test="/shop/different = 0 or string($result) != ''">
				<tr>
					<th>
						<xsl:value-of disable-output-escaping="yes" select="name"/>
						<xsl:if test="description !=''">
							<xsl:text> </xsl:text>
							<img src="/acvideo/css/img/tooltip.png" data-tooltip="{description}"/>
						</xsl:if>
					</th>
					<xsl:apply-templates select="/shop/comparing/shop_item" mode="property">
						<!-- Передаем через параметр ID свойства -->
						<xsl:with-param name="property_id" select="@id"/>
					</xsl:apply-templates>
				</tr>
			</xsl:if>
 
		</xsl:if>

3. Зайти в типовые динамические страницы, раздел интернет - магазин, и выбрать страницу сравнение товаров. В пункте код страницы между кодом:

<?php
 
$oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId'));
 
$Shop_Controller_Show = new Shop_Controller_Show($oShop);

и кодом:

$Shop_Controller_Show
	->limit(0)
	->group(FALSE)
	->xsl(
		Core_Entity::factory('Xsl')->getByName(
			Core_Array::get(Core_Page::instance()->libParams, 'xsl')
		)
	)
	->cache(FALSE)
	->itemsProperties(TRUE)
	->show();

Вставить код:

$different = Core_Array::getGet('diff',0);
$Shop_Controller_Show->addEntity(
	Core::factory('Core_Xml_Entity')
		->name('different')->value($different)
	);

Страницу создал Константин Сериков 15.09.16 в 12:57

private/koding/hostcms/modules/shop/useful/compare-products.txt · Last modified: 27.06.17 в 16:01 by maximzasorin_gmail.com