@GRIPGG
Front end

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

Работает - MODX revo,minishop2

Условие:
На определенную категорию (id 3) сделать скидку в корзине, если товаров 2=10%, 3=15%,4=17%, 5>=20%.
Действовать должно только на (id 3) категорию.

Другие решения использовал, все равно на все товары в корзине.

Пробовал решения:
<?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;
 
}
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
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;
 
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ManyChat Москва
от 150 000 ₽
от 210 000 до 250 000 ₽
Depcon Екатеринбург
от 100 000 до 170 000 ₽
17 окт. 2021, в 00:39
100000 руб./за проект
17 окт. 2021, в 00:32
100000 руб./за проект
16 окт. 2021, в 21:14
1500 руб./за проект