Пересчет цены от общей сумы в корзине minishop2
Доброго дня, очень надеюсь на Вашу помощь… Есть розничная цена (price) и оптовая (old_price). Если сумма заказа меньше 2000 руб — цена розничная, если больше — оптовая.
Сам плагин
Вроде все работает. Но не могу сделать динамическое обновление цен в корзине. Вернее они меняются только у того товара, у которого изменяешь количество, а все остальные не пересчитываются, только после перезагрузке страницы.
Понимаю что надо править default.js где-то в этом месте
Сам плагин
<?php
switch ($modx->event->name) {
case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart':
$total_cost_min = $cart->status()['total_cost_min'];
$tmp = $cart->get();
if ($total_cost_min > 200) {
foreach ($tmp as $key1 => $value) {
if ($product = $modx->getObject('msProduct', $value['id'])) {
$price = $product->get('price');
$old_price = $product->get('old_price');
$price = $old_price - $rate;
$tmp[$key1]['price'] = $price;
$modx->log(modX::LOG_LEVEL_ERROR, "cart: ".print_r($price,1) );
}
}
}
else {
foreach ($tmp as $key1 => $value) {
if ($product = $modx->getObject('msProduct', $value['id'])) {
$tmp[$key1]['price'] = $product->get('price');
}
}
}
$cart->set($tmp);
break;
}
total_cost_min — это сумма заказа с розничной ценой.Вроде все работает. Но не могу сделать динамическое обновление цен в корзине. Вернее они меняются только у того товара, у которого изменяешь количество, а все остальные не пересчитываются, только после перезагрузке страницы.
Понимаю что надо править default.js где-то в этом месте
status: function (status) {
if (status['total_count'] < 1) {
location.reload();
} else {
//var $cart = $(miniShop2.Cart.cart);
var $miniCarts = $(miniShop2.Cart.miniCart).add(miniShop2.Cart.miniCartClass);
if (status['total_count'] > 0 && $miniCarts.length > 0) {
$miniCarts.each(function (index, cart) {
if (!$(cart).hasClass(miniShop2.Cart.miniCartNotEmptyClass)) {
$(cart).addClass(miniShop2.Cart.miniCartNotEmptyClass);
}
});
}
$(miniShop2.Cart.totalWeight).text(miniShop2.Utils.formatWeight(status['total_weight']));
$(miniShop2.Cart.totalCount).text(status['total_count']);
$(miniShop2.Cart.totalCost).text(miniShop2.Utils.formatPrice(status['total_cost']));
$(miniShop2.Cart.totalDiscount).text(miniShop2.Utils.formatPrice(status['total_discount']));
if (typeof(status['cost']) === 'number') {
$(miniShop2.Cart.cost, '#' + status['key']).text(miniShop2.Utils.formatPrice(status['cost']));
}
$(miniShop2.Cart.price2, '#' + status['key']).text(miniShop2.Utils.formatPrice(status['price2']));
if ($(miniShop2.Order.orderCost, miniShop2.Order.order).length) {
miniShop2.Order.getcost();
}
}
},
Комментарии: 3
Понимаю что надо править default.jsНет, надо сделать копию и поменять системную настройку, но это если ты выбираешь сложный путь. Я бы выбрал этот компонент и не парился.
спасибо за комментарий
1) я так и сделал, копирнул default1.js, прописал к нему путь в ms2_frontend_js
подправил, но цена меняется только у одного товара, у которого изменяю количество
2)плагин не подойдет, т к оптовая цена там зависит от количества, а мне нужно от общей сумы
1) я так и сделал, копирнул default1.js, прописал к нему путь в ms2_frontend_js
подправил, но цена меняется только у одного товара, у которого изменяю количество
2)плагин не подойдет, т к оптовая цена там зависит от количества, а мне нужно от общей сумы
Понятно. Я что-то такое делал. Собственно проблема в том, что из плагина достаточно проблематично (читай невозможно) вернуть дополнительные данные на фронт, т.е. тебе нужно пересчитывать корзину на ронте отдельно. И я бы воздержался от изменения исходников, а использовал бы возможность добавить свой колбэк.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.