Пересчет цены от общей сумы в корзине minishop2

Доброго дня, очень надеюсь на Вашу помощь… Есть розничная цена (price) и оптовая (old_price). Если сумма заказа меньше 2000 руб — цена розничная, если больше — оптовая.
Сам плагин
<?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();
                }
            }
        },
Дмитрий
19 мая 2022, 11:23
modx.pro
602
0

Комментарии: 3

Артур
19 мая 2022, 14:42
0
Понимаю что надо править default.js
Нет, надо сделать копию и поменять системную настройку, но это если ты выбираешь сложный путь. Я бы выбрал этот компонент и не парился.
    Дмитрий
    19 мая 2022, 15:05
    0
    спасибо за комментарий
    1) я так и сделал, копирнул default1.js, прописал к нему путь в ms2_frontend_js
    подправил, но цена меняется только у одного товара, у которого изменяю количество
    2)плагин не подойдет, т к оптовая цена там зависит от количества, а мне нужно от общей сумы
    Артур
    19 мая 2022, 15:52
    0
    Понятно. Я что-то такое делал. Собственно проблема в том, что из плагина достаточно проблематично (читай невозможно) вернуть дополнительные данные на фронт, т.е. тебе нужно пересчитывать корзину на ронте отдельно. И я бы воздержался от изменения исходников, а использовал бы возможность добавить свой колбэк.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3