Вывод зачеркнутой старой цены рядом с ценой по скидке xslt — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
м (Whoa переименовал страницу Вывод зачеркнутой старой цены рядом с ценой по скидке(xslt). в [[Вывод зачеркнутой старой цены рядом с ценой по ск…)
 
(не показаны 2 промежуточные версии 1 участника)
Строка 1: Строка 1:
 
[[category:Верстка в XSLT]][[Категория:Модуль Интернет магазин]]
 
[[category:Верстка в XSLT]][[Категория:Модуль Интернет магазин]]
'''Актуально для версии 2.9'''
+
'''Актуально для версии 2.9.5'''
  
 
:Данное решение рассмотрено на примере интернет-магазина "Современный", шаблон demodizzy.
 
:Данное решение рассмотрено на примере интернет-магазина "Современный", шаблон demodizzy.
Строка 17: Строка 17:
 
:Цена по скидке выводится с помощью шаблона  
 
:Цена по скидке выводится с помощью шаблона  
  
<source lang="html4strict">
+
<source lang="xml">
<xsl:template match="price" mode="discounted-price">
+
<xsl:template match="price" mode="discounted-price">
<xsl:value-of select="concat(@prefix, ' ', actual, ' ', @suffix)" />
+
<xsl:value-of select="concat(@prefix, ' ', actual, ' ', @suffix)" />
</xsl:template>
+
</xsl:template>
 
</source>
 
</source>
  
 
:Внесем в него изменения:
 
:Внесем в него изменения:
  
<source lang="html4strict">
+
<source lang="xml">
<xsl:template match="price" mode="discounted-price">
+
<xsl:template match="price" mode="discounted-price">
<xsl:if test="original!=' ' ">
+
 
+
<xsl:if test="original">
      <span style="text-decoration: line-through">   
+
<div style="text-decoration: line-through">   
 +
<xsl:value-of select="concat(@prefix, ' ', original,' ', @suffix)" />
 +
</div>
 +
</xsl:if>
 +
<div>
 +
<xsl:value-of select="concat(@prefix, ' ', actual,' ', @suffix)" />
 +
</div>
 +
 +
</xsl:template>
 +
</source>
  
            <xsl:value-of select="concat(@prefix, ' ', original,' ', @suffix)" />
+
После того, как мы сделали шаблон для отображения цены, нужно применить этот шаблон.
 +
Например, в карточке товара (/templates/demodizzy/xslt/modules/catalog/object-view.xsl) вызов
 +
цены нужно задать следующим образом:
  
      </span>
+
<source lang="xml">
      </xsl:if>
+
<div class="price" itemprop="offers" itemscope="itemscope" itemtype="http://schema.org/Offer">
 
+
<span umi:element-id="{page/@id}" umi:field-name="price" itemprop="price">
            <xsl:value-of select="concat(@prefix, ' ', actual,' ', @suffix)" />  
+
<xsl:apply-templates select="document(concat('udata://emarket/price/', page/@id))/udata/price" mode="discounted-price"/>
</xsl:template>
+
</span>
 +
<link itemprop="itemCondition" href="http://schema.org/NewCondition" />
 +
</div>
 
</source>
 
</source>
  
:Старая цена зачеркивается, если срабатывает условие, что original(старая цена) не пустой.
+
То есть, мы применяем к вызову udata://emarket/price/ мод "discounted-price" и суживаем необходимую информацию до /udata/price.
:Если не прописать данное условие, то, при отключении активности скидки, рядом с обычной ценой отобразится лишний зачеркнутый суффикс "руб".
 

Текущая версия на 10:11, 15 августа 2018

Актуально для версии 2.9.5

Данное решение рассмотрено на примере интернет-магазина "Современный", шаблон demodizzy.
Изменения производились в файле price.xsl (templates/demodizzy/xslt/modules/emarket)


Задача:

Необходимо, чтобы, при включении скидки на товар, рядом выводилась перечеркнутая старая цена.

Решение:

Отредактировать необходимо шаблон, по которому выводятся все цены, а именно - price.xsl
Находится в templates/название шаблона/xslt/modules/emarket
Цена по скидке выводится с помощью шаблона
	<xsl:template match="price" mode="discounted-price">
		<xsl:value-of select="concat(@prefix, ' ', actual, ' ', @suffix)" />
	</xsl:template>
Внесем в него изменения:
	<xsl:template match="price" mode="discounted-price">
	
		<xsl:if test="original">
			<div style="text-decoration: line-through">  
				<xsl:value-of select="concat(@prefix, ' ', original,' ', @suffix)" />
			</div>
		</xsl:if>
		<div>
			<xsl:value-of select="concat(@prefix, ' ', actual,' ', @suffix)" /> 
		</div>
		
	</xsl:template>

После того, как мы сделали шаблон для отображения цены, нужно применить этот шаблон. Например, в карточке товара (/templates/demodizzy/xslt/modules/catalog/object-view.xsl) вызов цены нужно задать следующим образом:

	<div class="price" itemprop="offers" itemscope="itemscope" itemtype="http://schema.org/Offer">
		<span umi:element-id="{page/@id}" umi:field-name="price" itemprop="price">
			<xsl:apply-templates select="document(concat('udata://emarket/price/', page/@id))/udata/price" mode="discounted-price"/>
		</span>
		<link itemprop="itemCondition" href="http://schema.org/NewCondition" />
	</div>

То есть, мы применяем к вызову udata://emarket/price/ мод "discounted-price" и суживаем необходимую информацию до /udata/price.