miniShop2 - скидка или наценка к сумме заказа
Добрый день!
Такой вопрос… нужно реализовать логику: наценка 5%, если в корзине 1 или 2 товара, скидка 2%, если в корзине 8 товаров или больше. Как это делать?
Пока идея: переопределить msCartHandler, в методе get реализовать мою логику:
… но… есть еще
… окей, и там можно реализовать эту логику. И еще немного надо будет поправить js файлы, хорошо… хотя уже что-то много правок намечается… я верно пытаюсь сделать? или нужно по другому реализовывать? Василий, как бы ты поступил? Общие мысли интересуют, реализовать — справлюсь :)
Естественно, мне нужно, что бы все заработало и в маленькой корзине в шапке сайта, и в большой корзине.
Такой вопрос… нужно реализовать логику: наценка 5%, если в корзине 1 или 2 товара, скидка 2%, если в корзине 8 товаров или больше. Как это делать?
Пока идея: переопределить msCartHandler, в методе get реализовать мою логику:
public function get() {
$cart['skidka'] = array('id' => 'skidka', 'price' => -100, 'weight' => 0, 'options' ),
return $this->cart;
}… но… есть еще
public function status($data = array()) {… окей, и там можно реализовать эту логику. И еще немного надо будет поправить js файлы, хорошо… хотя уже что-то много правок намечается… я верно пытаюсь сделать? или нужно по другому реализовывать? Василий, как бы ты поступил? Общие мысли интересуют, реализовать — справлюсь :)
Естественно, мне нужно, что бы все заработало и в маленькой корзине в шапке сайта, и в большой корзине.
Комментарии: 17
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
1. Переопределяем msCartHahdler. В частности функцию status:
getCartMargin, getCartDiscount — считайте скидку и наценку как хотите в них, для этого у вас есть $this->cart — корзина с товарами.
2. Копируем файл minishop2.js, указываем в настройках новый путь к нему, добавляем логику:
2.1 Метод miniShop2.Cart… setup
2.2. Метод status:
3. Ну и добавляем в чанк cart.Outer строчки с наценкой и скидкой:
При загрузке страницы корзины значения скидки/наценки не проставляются, только после каких-либо изменений в корзине.
Что нужно сделать, чтоб они показывались сразу после обновления страницы,
Пункт 3 из моего комментария переделываем:
Сниппет msCart копируем в msCartEx и вызываем на странице его.
в нем (в конце, после цикла foreach ($cart as $k => $v) ) добавляем примерно это:
Вообще вещь индивидуальная для каждого сайта, поэтому подгоняйте для себя.
т.е. тут у нас 2 действия:
1. проставляем margin и discount
2. скрываем или показываем строчку со скидкой.
Увы я не силен в программировании. И такая простая вещь иногда ставит в тупик)
PS Попробовал — такая конструкция дает ошибку
Она делает скидку 2%, если в корзине есть как минимум 2 разных товара по 4 штуки (это магазин шин и дисков, т.е. имеется ввиду что в корзине минимум 2 набора по 4 колеса или диска). Так е есть наценка 5% если в корзине всего 1 товарная позиция с кол-вом меньшим или раным 2 штук (например 1 или 2 покрышки) и общей суммой заказа меньше 4 тысяч рублей…
+ тут еще есть округление скидки или наценки до 50 рублей функцией roundCost
Единственное — встал вопрос, как эту скидку указать в письме, отправляемом клиенту?
Или изменить цену товара на цену со скидкой.
А то получается вот такая картина joxi.ru/YmEkaaytapoBA6
Три товара по 570 руб. стоят 1460 руб. вместо 1710 руб.
Судя по вызову в чанке tpl.msOrder.success сниппета [[!msGetOrder?id=`[[+id]]`]], в нем и надо делать правки.
Попробовал добавить в нем:
Но результата не добился)
а в скриптовом файле не надо правки вносить?
но раз взялся помочь, залез и дальше.
Алгоритм следующий:
1. Делаем копию сниппета msGetOrder, что бы при обновлении все не затерлось
2. В этом сниппете есть цикл
в котором мы «пробегаемся» по покупкам.
Так давайте посчитаем в цикле стоимость покупок:
3. И еще у нас есть $outer['cart_cost'], она где то в вверху сниппета фигурирует — это стоимость корзины.
Так вот, если была скидка или наценка, то стоимость покупок и стоимость корзины не совпадают)) Значит можно и посчитать скидку или наценку простым вычитанием. При этом вызывать $miniShop2->cart->getCartMargin(); не нужно из этого снипеета!
Сейчас пробую реализовать по этой инструкции.
Вроде все понятно, но получаю какие-то результаты не те.
Добавил $rowsCost += $row['cost']; в блок с foreach ($rows as $row) {.
Ниже цикла, перед конструкцией:
Пытаюсь вставить код:
Результат получается сумма всех товаров -1. (1709 руб.)
Причем если вывожу так:
То выводится правильная сумма всех товаров без скидки. (1710 руб.)
Если вывожу вот так:
То выводится стоимость корзины (сумма товаров со скидкой 1460 руб.)
Не могу въехать почему не работает конструкция $rowsCost — $outer['cart_cost'];
Алексей, спасибо большое за помощь!