Изменить цену на товар в зависимости от количества при добавлении в корзину minishop2

На сайте магазина по оптовым продажам товаров из Китая нужно было реализовать систему скидок, которая зависит от количества товара в корзине. Для каждого товара прописывается цена за 1/5/10/50/100/500/1000 товаров в отдельных полях. Кстати о том как их сделать можно почитать тут.

Реализовывать сей функционал будем через плагин.

switch ($modx->event->name) {
    case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart':
    $tmp = $cart->get(); //Получаем информацию о козине - т.е. список товаров
    //$modx->log(xPDO::LOG_LEVEL_ERROR, print_r($tmp, true)); // Используем лог для того чтобы хоть какую-то понимать с чем мы работаем:) (пишется в файл core/cache/logs/error.log)
    foreach ($tmp as $key1 => $value) {
        // Тут "бизнес логика" конкретно этого сайта, она может быть любая по сути. 
            if ($product = $modx->getObject('msProduct', $value['id'])) {
            	$quantity = $value['count']; // получаем кол-во товара в корзине
            	if ($quantity > 499) {
            		$tmp[$key1]['price'] = $product->get('price500');
            	}
            	elseif ($quantity > 99) {
            		$tmp[$key1]['price'] = $product->get('price100');
            	}
            	elseif ($quantity > 49) {
            		$tmp[$key1]['price'] = $product->get('price50');
            	}
            	elseif ($quantity > 9) {
            		$tmp[$key1]['price'] = $product->get('price10');
            	}
            	elseif ($quantity > 4) {
            		$tmp[$key1]['price'] = $product->get('price5');
            	}
            	else {
            		$realPrice = $product->get('price1');
            		$tmp[$key1]['price'] = $realPrice; // Устанавливаем новую цену для товара в корзине
            	}
            }
        }
    //$modx->log(xPDO::LOG_LEVEL_ERROR, $realPrice);
    $cart->set($tmp); //Записываем данные в корзину
    break;
}

Подобным образом, вероятно, можно поменять все параметры корзины..

Комментарии (1)

  1. Алексей 18 сентября 2023, 11:01 # 0
    Данные события msOnChangeInCart', 'msOnAddToCart', 'msOnRemoveFromCart' не срабатывают при уменьшении количества товара в корзине
    *Комментарий будет опубликован после проверки модератором

    Комментарии easyComm

    Станислав 24 апреля 2018, 14:27

    Собственно решил задачу с динамическим обновлением цены при изменение количества (в корзине). Спасибо за статью

    Станислав 23 апреля 2018, 22:23

    Спасибо за подсказку!

    Осталось решить, как динамически обновлять цену товара в корзине (например, положили в корзину 10 товаров, а потом изменили на 9 — но цена осталась за 10).

    А вообще, идей для продолжения много

    Похожие статьи

    Генератор настроек MIGX

    Документация на русском по MODX MIGX

    Подсказки по работе и заготовки для MiniShop2

    pdoPage и getImageList - Постраничная навигация MIGX

    Импорт и экспорт в MiniShop2. Реализация 1

    Как включить HTTPS (SSL) в MODX - Подробная инструкция

    Генерация YML для выгрузки в маркет

    Примеры работы с API MODX

    Примеры выборки where, optionFilters, innerJoin

    Расширение свойств товаров minishop2

    pThumb - ресайз изображений. Примеры использования.

    Примеры использования

    Сайт на обслуживании (выключить сайт)

    Вывести getImageList только если он не пустой

    Добавить в письмо контактную информацию

    Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

    Оформление и настройка easyComm. Комментарии и отзывы на сайте.

    Поиск на сайте с пакетом SimpleSearch

    Простая и симпатичная галерея fancybox

    Вывод tv-параметров в формате -

    Подсчет и вывод количества потомков ресурса в MODX

    Галерея. Вывести обложки альбомов и фотографии

    Отредактировать письмо о заказе - добавить ТВ поле, или что-то еще

    Quip для MODX. Более рабочий вариант

    pdoResources Заготовки для работы

    Сниппет для вывода размера и расширения файла

    Простой аудио-плеер HTML5

    Вывести список всех опций MiniShop2

    Изменить цену на товар в зависимости от количества при добавлении в корзину minishop2

    Как контролировать кэш CSS и скриптов

    Слайдер Slick slider в контенте ресурса

    Подключить MODX в стороннем PHP файле

    Простейшая авторизация

    Красивое адаптивное меню под pdoMenu

    Как создать ресурс процессором $modx->runProcessor('resource/create', $props)

    Массово обновить ТВ, или другое поле через базу

    Изменить формат номера заказа

    Создать свою страницу в админке

    Сообщение о том, что сайт использует Cookie

    Получить grandparent. Вывести родитель родителя

    Симпатичный список файлов, загружаемых к ресурсу через MIGX

    Установить шаблон по-умолчанию для новых, создаваемых ресурсов

    Создать источник файлов

    Вывести все доступные плейсхолдеры

    Отредактировать шаблон письма

    Добавить скрипт перед тегом body

    Общая сумма по каждому товару в корзине Minishop2

    Создать раздел с паролем на сайте MODX

    Что делать если ее приходит почта администратору

    Фильтрация по TV параметрам в msProducts

    Дата на русском

    FontAwesome - часто используемые иконки для шаблонов MODX

    Создать пакет с пользовательской таблицей

    Заготовки для работы

    Курсы валют с cbr.ru на PHP

    getResources заготовки

    Загрузка сниппета после загрузки страницы через AjaxSnippet

    Обязательный чекбокс при оформлении заказа

    Соответствие названия классов с названиями таблиц в MySQL

    Разбить вывод pdoResources на несколько колонок (блоков)

    Баннеры с использованием BannerY

    Обработка остатков заказа в miniShop2

    CSS для постраничной навигации pdoPage

    Вывести время загрузки (формирования) страницы

    Расширить таблицу site_content (объект modResource) за 5 минут

    Обновить alias (псевдоним) у всех ресурсов

    Счетчик посещений и скачиваний для сортировки ресурсов

    Вырезать кавычки — фильтр-сниппет MODX

    Динамическое поле emailSubject в FormIt

    Бесплатная доставка от 5000 рублей в MiniShop2

    Скрыть информацию о том, что сайт работает на MODX

    Отсортировать ресурсы по количеству комментариев Quip MODx

    Изменить цену на товар, если в корзине лежит товар из особой категории minishop2

    Создать редирект через autoRedirector API

    Вывести 404 ошибку по настройке TV MODX

    Ответ для сервиса moneta.ru

    Email сделать не обязательным полем

    Как разместить исходный код сниппета на сайте, в документации

    Ускорить установку MODX revo до пары кликов

    Cортировать по списку id в pdoResources и pdoTools

    Постраничная навигация — набор параметров и CSS PdoPage

    Сделать поле размер обязательным

    Не работает подгрузка товаров ajax mfilter2 на мобильном

    Сделать все элементы статичными для Git и IDE

    Настройка стилей для комментариев Tickets

    Кастомный чанк для AdminPanel

    Подключить текстовой редактор к доп. полям ресурса

    Динамическая замена шаблона ресурса - плагин

    Разместить корзину внутри блока с оформлением заказа

    Вывести список всех родителей в ТВ поле ресурса

    Плагин для формирования замороженных URL с редиректом

    Вложенные условия в xPDO MODX

    Приветственный экран / заглушка на сайт

    Вывести список всех емэйлов miniShop2

    Если getParentIds не работает в плагине

    Как получить данные пользователя сразу после авторизации через API

    xPDO Выборка из одной таблицы с зацепкой значения из другой

    Контролировать кэширование файлов CSS и JS MiniShop2

    Не приходят / не отправляются письма - в чем причина?

    Кэширование в MODX: использование $modx->cacheManager

    Наш сайт использует куки, нажмите «ОК» если вы не против
    OK