Оптовая цена при заказе на сумму более 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>:
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.