Оптовая цена при заказе на сумму более 10000
        Здравствуйте, друзья!
Такой вопрос. Допустим, я сделаю old_price — оптовой ценой. Мне нужно, чтобы было так:
если общий заказ превышает 10000, корзина пересчитывается и вместо вместо обычной цены идет оптовая.
Это я должна как-то написать плагин на событие msOnBeforeAddToOrder? Дайте, пожалуйста, направление мысли!
    
    
                                                                                
            Такой вопрос. Допустим, я сделаю old_price — оптовой ценой. Мне нужно, чтобы было так:
если общий заказ превышает 10000, корзина пересчитывается и вместо вместо обычной цены идет оптовая.
Это я должна как-то написать плагин на событие msOnBeforeAddToOrder? Дайте, пожалуйста, направление мысли!
Комментарии: 13
                modx.pro/help/11810/ — посмотри внимательно, в комментариях направление есть. В самой статье же и ссылки на похожие решения. 
У меня всё получилось — просто возьми мой вариант из комментариев и адаптируй под твои нужды.
                    У меня всё получилось — просто возьми мой вариант из комментариев и адаптируй под твои нужды.
                Вот такой идиотский вопрос — а скрипт для фронтенда куда вписывать?            
                    а скрипт для фронтенда куда вписывать?Прямо на фронтенд и вписывать.
В шаблоне если подключён файл .js или просто вставить код перед закрывающим тегом . Это уже зависит от того как организован проект.
                Поскольку у меня цены формируются так:
розница 150% от закупочной
опт 130% от закупочной
я воспользовалась вашим плагином, но он почему-то не работает( Или, может, я не вывела эти оптовые цены на фронт. Они в идеале где должны отображаться? Вместо стоимости корзины?
Вот плагин:
Собственно, скрипт ему не нравится: 684 строчка:
                    розница 150% от закупочной
опт 130% от закупочной
я воспользовалась вашим плагином, но он почему-то не работает( Или, может, я не вывела эти оптовые цены на фронт. Они в идеале где должны отображаться? Вместо стоимости корзины?
Вот плагин:
<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart': 
        $total_count = $cart->status()['total_count'];
        $total_cost = $cart->status()['total_cost'];
        
        $procent = 130;
        
        $tmp = $cart->get();
        
        if ($total_cost > 10000) {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                    $price = $product->get('price');
                    $price = $procent * $price / 150;
                   
                	$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;
}Вот скрипт:<script>
    miniShop2.Callbacks.add('Cart.change.response.success', 'response_log', function(e) {
        var total_cost = e.data.total_cost;
        if(total_cost > 10000) {      
            console.log('opt');
            $('#msCart .price .procent').text('Опт');
        } else {
            $('#msCart .price .procent').text('');
        }
    });
    miniShop2.Callbacks.add('Cart.remove.response.success', 'response_log', function(e) {
        var total_cost = e.data.total_cost;
        if(total_cost > 10000) {      
            console.log('opt');
            $('#msCart .price .procent').text('Опт');
        } else {
            $('#msCart .price .procent').text('');
        }
    });
</script>Вот ошибка: Uncaught TypeError: miniShop2.Callbacks.add is not a function at korzina.html:684Собственно, скрипт ему не нравится: 684 строчка:
miniShop2.Callbacks.add('Cart.change.response.success', 'response_log', function(e) {            
                Скорее всего, вы запускаете скрипт раньше, чем подключается скрипт minishop2. Поэтому он функцию не «узнаёт»            
                    
                Да. Я тоже об этом подумала. И загнала скрипт в самый низ. Ошибки больше нет, но и ничего не работает( КАк мне вообще проверить, что там происходит, работает ли этот плагин?            
                    
                Извините! Подумать-подумала, но в самый низ вставить никак не могу. Еще понять надо в какой файл. Разберусь и отпишусь, что получается!            
                    
                1. Так и не могу понять — как грамотно вписать мой скрипт. Дефолтный скрипт минишопа подключается в самом конце страницы по-любому. Единственное что удалось — дописать мой скрипт прямо в default.js. Переименовать его в жизни и в настройках — это правильно?
2. Считает идиотски) Если сразу закинуть 10 костюмов по 1300 — в корзине правильно указывает оптовую цену и оптовую стоимость.
Но если сначала взять один костюм и увеличить кол-во товара уже в корзине — отдает цену розничную и стоимость розничную.
Зато если потом к этой корзине, по стоимости превышающей 10 000, добавить еще какой-то товар — пересчитывает правильно.
3. Очень тупой вопрос — зачем нужен и плагин, и js?
                    2. Считает идиотски) Если сразу закинуть 10 костюмов по 1300 — в корзине правильно указывает оптовую цену и оптовую стоимость.
Но если сначала взять один костюм и увеличить кол-во товара уже в корзине — отдает цену розничную и стоимость розничную.
Зато если потом к этой корзине, по стоимости превышающей 10 000, добавить еще какой-то товар — пересчитывает правильно.
3. Очень тупой вопрос — зачем нужен и плагин, и js?
                Вопрос 2 отпал — забыла указать событие msOnChangeInCart, сейчас пересчитывает все при любых изменениях корзины. Но сам процент считался как-то дебильно… с копейками… Я решила использовать поле weight — не понимаю теперь, как его переименовать в админке, чтобы прилично выглядело.            
                    
                Жаль, что здесь нельзя удалять свои комментарии. Я неплохо разобралась в теме за эти часы. Все сделала по уму. Для оптовой цены ввела опцию, пересчет работает прекрасно. 
Хочу только на фронтенде в случае опта к сумме заказа приписать слово «опт» — в чанке tpl.msCart.outer вставила после «Ваша сумма заказа» — и вот никак не пишется слово это!
Я вписала в конец дефолтного js строчки:
Uncaught TypeError: miniShop2.Callbacks.add is not a function
Частично работает скрипт, потому что отображается зачеркнутая розничная цена. А вот слово «опт» никак не могу добить!
                    Хочу только на фронтенде в случае опта к сумме заказа приписать слово «опт» — в чанке tpl.msCart.outer вставила после «Ваша сумма заказа» — и вот никак не пишется слово это!
Я вписала в конец дефолтного js строчки:
miniShop2.Callbacks.add('Cart.change.response.success', 'response_log', function(e) {
        var total_cost = e.data.total_cost;
        if(total_cost > 10000) {      
            console.log('opt');
            $('#msCart .opt').text('Опт');
        } else {
            $('#msCart .opt').text('');
        }
    });
    miniShop2.Callbacks.add('Cart.remove.response.success', 'response_log', function(e) {
        var total_cost = e.data.total_cost;
        if(total_cost > 10000) {      
            console.log('opt');
            $('#msCart .opt').text('Опт');
        } else {
            $('#msCart .opt').text('');
        }
    });но консоль все равно выдает: Uncaught TypeError: miniShop2.Callbacks.add is not a function
Частично работает скрипт, потому что отображается зачеркнутая розничная цена. А вот слово «опт» никак не могу добить!
                Где находится вышеприведённый скрипт? В отдельном файле или прямо в конце шаблона?            
                    
                Если на сайте используется Fenom, то можно в шаблоне зарегистрировать чанк с этим оптовым js-кодом.
Выглядеть это будет примерно так:
                    Выглядеть это будет примерно так:
{$_modx->regClientHTMLBlock($_modx->getChunk('scripts.opt'))}В таком случае скрипт должен подключаться при рендеринге страницы после минишоповских скриптов.            
                Прям в конце default.js. В самом конце дописала. А в шаблоне корзины tpl.msCart.outer написала:
                    СУММА ВАШЕГО ЗАКАЗА<span class="opt"></span>:            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.