Динамическое обновление цены при выборе опционных свойств

Материал из Umicms
Перейти к:навигация, поиск

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

Для того, чтобы пользователь при выборе товара с опционными свойствами мог видеть окончательную цену, мы напишем небольшой скрипт. Скрипт будем использовать на примере demo шаблона "Интернет-магазин современный". Все изменения будем вносить только в один файл, который отвечает за вывод данных о товаре - \xsltTpls\modules\catalog\object-view.xsl

Находим на 18-20 строчках такой блок

<span umi:element-id="{page/@id}" umi:field-name="price">
<xsl:apply-templates select="document(concat('udata://emarket/price/', page/@id))" />
</span>

Добавляем идентификатор и записываем значение в переменную.
Получается примерно так:

<span id="price_id" umi:element-id="{page/@id}" umi:field-name="price">
	<xsl:apply-templates select="document(concat('udata://emarket/price/', page/@id))" />
</span>

<script type="text/javascript"> var original_price = parseFloat($('#price_id').text(), 10); </script>


Теперь добавляем само событие по клику на опционное свойство, а так же убираем свойство по умолчанию. Т.е. меняем блок на строках 151-157:

<input type="radio" name="options[{../../@name}]" value="{object/@id}">
	<xsl:if test="position() = 1">
		<xsl:attribute name="checked">
			<xsl:text>checked</xsl:text>
		</xsl:attribute>
	</xsl:if>
</input>

На блок такого вида:

<input type="radio" name="options[{../../@name}]" value="{object/@id}" onClick="
	var value1 = parseFloat($(this).parent().parent().children('td:last-child').html());
	$('#price_id').html( value1 + original_price );
" />


Теперь когда заходим на страницу товара видим как меняется его цена от выбора опционных свойств.