probnik_umi
@probnik_umi
Развивающийся

Динамическое изменение цены при выборе опционального свойства?

Необходимо к основной цене прибавить стоимость опции и динамически, без перезагрузки страницы, вывести результат в карточке товара, чтобы где указана основная цена - итоговая цена сразу же пересчитывалась с учетом стоимости выбранной опции. В корзине все делается так как нужно. Дело касается только карточки товара, где есть выпадающий список опций (select) - откуда берется цена опций. За основу было взято решение с форума:
Практически это и нужно. Только код в basket.js отвечающий за этот вывод не могу откорректировать (в php пока не разбираюсь) . То что работает по основной цене и на корзину товаров в basket.js выглядит так:

site.basket.add = function(id, form, popup) {
var e_name, options = {};
if (form) {
var elements = jQuery('option:selected', form);
for (var i = 0; i < elements.length; i++) {
e_name = elements[i].id.replace(/^options\[/, '').replace(/\]$/, '');
options[e_name] = elements[i].value;
}
}
basket.putElement(id, options, this.replace(id));
if (popup) jQuery('#add_options_' + id).remove();
};

То что работает (из примера - см. ссылку), но отдельно и то что следует прикрутить к вышеуказанному коду выглядит так:

var site = {};

site.itemAddOptionPrice = function () {
$( "option:selected", this).each(function() {
var price = parseFloat(jQuery(this).data('original-price')),
target = $(this).parent().parent().find('.price__value'),
itemPrice = parseFloat(target.data('original-price'));
target.html(itemPrice + price);
});
};

site.init = function () {
jQuery('.item__option').change(site.itemAddOptionPrice);
};

jQuery(document).ready(function () {
site.init();
});

Шаблон активации при выборе опций находится в файле popup-add-options.xsl и выглядит так:

xsl:template match="/"
form class="options" action="/emarket/basket/put/element/{udata/page/@id}/" onsubmit="site.basket.add('{udata/page/@id}', this, true); return false;"
xsl:apply-templates select="//group[@name = 'catalog_option_props']/property" /
/form
/xsl:template

и 2 шаблона из файла object-view.xsl отвечающих за вывод выпадающего списка опций выглядят так:

xsl:template match="property" mode="table_options"
table class="object"
tr
th
xsl:value-of select="concat(title, ':')" /
/th
td
select id="options[{@name}]" name="options[{@name}]"
xsl:apply-templates select="value/option" mode="table_options" /
/select
/td
/tr
/table
/xsl:template

xsl:template match="option" mode="table_options"
option value="{object/@id}" name="options[{../../@name}]" id="options[{../../@name}]"

xsl:if test="position() = 1"
xsl:value-of select="object/@name" /
/xsl:if

xsl:if test="position() != 1"
xsl:value-of select="concat(object/@name, ' ', '+', ' ', @float, ' ', 'р.')" /
/xsl:if
/option
/xsl:template

Как раз о данных опциях (выпадающий список) и идет речь:

xsl:if test="position() != 1"
xsl:value-of select="concat(object/@name, ' ', '+', ' ', @float, ' ', 'р.')" /
/xsl:if

Стоимость опций (@float) нужно прибавить к основной цене $price = $this->getOptionPrice($propertyName, $optionId); Логика пересчета цен расположена в файлах optioned.xsl и basket.js

Сайт на xslt на системе UMI-CMS. Я так понимаю, что достаточно будет правки кода в файле basket.js и шаблона в файле object-view.xsl Просьба подсказать оптимальное решение в моей ситуации. Заранее благодарен за любую тех. поддержку.
  • Вопрос задан
  • 1510 просмотров
Пригласить эксперта
Ответы на вопрос 1
probnik_umi
@probnik_umi Автор вопроса
Развивающийся
ссылка на используемый пример к этому вопросу не отобразилась. Дублирую: umihelp.ru/forum/index.php?topic=1784.0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы