G
G
GRIP2021-08-20 17:55:55
PHP
GRIP, 2021-08-20 17:55:55

Cart discount minishop2 modx revo?

Works - MODX revo,minishop2

Condition:
For a certain category (id 3) make a discount in the cart if there are 2=10%, 3=15%, 4=17%, 5>=20% products.
Should act only on (id 3) category.

I used other solutions, all the same for all the goods in the basket.

Tried solutions:

<?php
switch ($modx->event->name) {
    case 'msOnAddToCart': 
    case 'msOnChangeInCart': 
    case 'msOnRemoveFromCart':  // Обрабатывать только события добавления в корзину и изменения количества
 
        $cartArray = $cart->get(); // Массив корзины
        $cartStatus = $cart->status(); // Состояние корзины
        $totalCount = $cartStatus['total_count']; // Общее количество товаров в корзине

    
        if  ($_modx->resource.parent == 3); // ($product.parent ==3) и другие варианты - скидка все равно на все товары в корзине
        elseif ($totalCount < 5) $coeff = 1; // Установка коэффициента в зависимости от количества 
        elseif ($totalCount < 10) $coeff = 0.8;
        elseif ($totalCount < 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;
 
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
I
Igor, 2021-08-26
@GRIPGG

Something like this:

<?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;
 
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question