• Скидка в корзине minishop2 modx revo?

    ig0r74
    @ig0r74
    MODX-разработчик
    Как-то так:
    <?php
    switch ($modx->event->name) {
        case 'msOnAddToCart': 
        case 'msOnChangeInCart': 
        case 'msOnRemoveFromCart':  // Обрабатывать только события добавления в корзину и изменения количества
     
            $cartArray = $cart->get(); // Массив корзины
            $cartStatus = $cart->status(); // Состояние корзины
            $totalCount = $cartStatus['total_count']; // Общее количество товаров в корзине
    
            $category_count = 0;
            foreach ($cartArray as &$cartProduct) { // Обрабатываем все товары корзины
                if ($product = $modx->getObject('msProduct', $cartProduct['id'])) { // Получаем объект товара по его ID в корзине
                    if ($product->get('parent') == 3)$category_count + $cartProduct['count'];
                }
            }
            // $category_count - здесь кол-во товаров в корзине, которые присутствуют в категории 3
    
            if ($category_count < 5) $coeff = 1; // Установка коэффициента в зависимости от количества 
            elseif ($category_count< 10) $coeff = 0.8;
            elseif ($category_count< 20) $coeff = 0.7;
            else $coeff = 0.6;
     
            foreach ($cartArray as &$cartProduct) { // Обрабатываем все товары корзины
                if ($product = $modx->getObject('msProduct', $cartProduct['id'])) { // Получаем объект товара по его ID в корзине
                    $cartProduct['price'] = $product->get('price') * $coeff; // Изменение цены
                }
            }
     
            $cart->set($cartArray); // Запись нового состояния корзины
            break;
     
    }
    Ответ написан
    Комментировать