1 Отредактировано Ольга (16.09.2015 21:53:07)

Тема: Правила для корзины

Добавление бонуса к заказу - как правильно его сделать?

Есть задача - чтобы в корзине добавлялся товар в подарок, т.е. стоимость 0 руб.

1. Если создать товар с видимость и ценой 0 руб, то в яндекс маркет прайс лист не проходит.
2. Если видимость убрать, то ссылка в корзине всё равно остаётся на товар и при переходе выдаёт ошибку 404.
3. Если создать товар, со стоимостью больше 0 руб., то нельзя вычесть его стоимость в корзине, т.к. скидка есть только в %.
4. Сделать скидку 100% на бонусный товар, если цена не 0 руб., тоже нельзя почему-то)

Как поступить?

Повысить оценку Понизить оценку

2

Re: Правила для корзины

Нужно использовать вариант 1, т.е. товар с видимостью, ценой - 0, но поместить его в скрытую категорию.
Далее просто исключите скрытую категорию (в которой товар-подарок) из профиля экспорта в ЯМ.

Повысить оценку Понизить оценку

3

Re: Правила для корзины

Спасибо. Всё получилось!

Повысить оценку Понизить оценку

Re: Правила для корзины

Добрый день! Модуль полезный, но мне не хватает функционала!
Стоит задача сделать правило: при заказе 20ед. товара 5% скидки, от 50 ед. 10%, от 100ед. 15%. К сожалению в одном правиле это сделать не получается, т.к. сразу при любом количестве товара в корзине, становиться наивысшая скидка. Приходиться на один товар делать три правила.
Хотелось бы:
Если товара >20 то скидка5%, если >50 то скидка 10%, если  >100 то скидка 15%.......
Может кто может подсказать как поменять код в модуле чтобы такое было возможным? Спасибо.

5

Re: Правила для корзины

Вы можете создать 3 правила:

1. Если общее количество товара >19
и если общее количество товара <50
то применить скидку 5%

2. Если общее количество товара >49
и если общее количество товара <100
то применить скидку 10%

3. Если общее количество товара >99
то применить скидку 15%

В данном случае только одно правило будет срабатывать на общее количество  товаров в корзине.
Уточните, чем вам этот вариант не подходит?

Повысить оценку Понизить оценку

Re: Правила для корзины

это три разных правила на один товар. товаров которым надо прописать правило допустим 100. это 300 разных таблиц, по три на товар.
Наглядно вот так
https://vk.com/photo-106256709_392026789

Re: Правила для корзины

просто магазин оптовый, и скидка зависит от количества. Еще бы можно было в карточке товара с помощью многомерных комплектация сделать, но я не нашел как к каждой комплектации добавить свою цену и минимальный заказ(.

8

Re: Правила для корзины

Нет, так как вы предложили в одно правило 3 независимых "если" и "то", к сожалению, в данном модуле не сделать.  Точнее объем доработок сравни написанию полностью другого модуля.

В модуле заложена абстракция: При выполнении условий "Если", выполняются все "То".

И здесь невозможно качественно сделать связь между конкретным "если" и "то",
порядковый номер - это не совсем корректно, т.к. функционльность позволяет создавать разноплановые "То", в том числе и применять несколько "То".

Многомерные комплектации - тоже не совсем подходят под вашу задачу. Это всего лишь параметры товара.
В этой абстракции нет зависимости от количества.

На мой взгляд эту задачу можно решиться только доп.модулем, который добавит к товару возможность указания диапазона количества и скидки.

Повысить оценку Понизить оценку

9 Отредактировано Ярослав (07.12.2015 19:29:37)

Re: Правила для корзины

Как то была подобная задача.
Решил следующим путем.
Настроил несколько типов цен для соответствующей скидки.


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

<?php

namespace Opt\Config;

class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this->bind('cart.update.after')
               ->bind('cart.getcartdata')
              ->bind('cart.addproduct.after'); 
    }    
    
   public static function checkprice($info)
    {
         //\Catalog\Model\CostApi::setSessionDefaultCost(2); 
          if (!$_SESSION['user_cost_id']) {
                $_SESSION['user_default_cost_id']=\Catalog\Model\CostApi::getDefaultCostId();
                $cost_id=\Catalog\Model\CostApi::getDefaultCostId() ;
         }  
           else   $cost_id=$_SESSION['user_cost_id'];
                                                    
         $cart=$info['cart'];      
         $cartinfo = $cart->getCartData(false,false);
         flog($cost_id);                                
         flog( $cartinfo['total']);   
  //здест условие для переключения типа цены        
         if ((  $cartinfo['total']<50000) &&( $cost_id!=1)) 
         {       

             $_SESSION['user_cost_id']=1;    
               
             //здесь необходимо обновить корзину  
             //Заменим закешированный _current_cost_id у объекта товара 
            
            foreach($cart->getProductItems() as $cartdata) {  
             
                $cartdata['product']['_current_cost_id'] =1;
            }

            //Очистим сведения для блока корзины
            $cart->cleanInfoCache();
 
             $info['cart']=$cart;           
             
        }
///здесь условие для переключения типа цены
         elseif ((  $cartinfo['total']>=50000)&&( $cost_id!=2)) 
         {       
             
              $_SESSION['user_cost_id']=2;  
              
              //здесь необходимо обновить корзину 
              //Заменим закешированный _current_cost_id у объекта товара
            foreach($cart->getProductItems() as $cartdata) {
            
                $cartdata['product']['_current_cost_id'] =2; 
                
            }

            //Очистим сведения для блока корзины
            $cart->cleanInfoCache();
 
             $info['cart']=$cart;   
            
         };
      
         $info['cost_id']= $_SESSION['user_cost_id'];        
       return $info;    
    }
  public static function cartUpdateAfter ($info)
    {  
    
       $result=self::checkprice($info);           
       return $result;     
           
    }
   public static function cartGetcartdata ($info)
   {     
     
     $k=$info['cart_result'];     
     $k['cost_id']= $_SESSION['user_cost_id'];  

     return $info ;
   }   
                           
   public static function cartAddproductAfter ($info)
    {  
           $result=self::checkprice($info);           
          return $result;
    }
    
}