Скидка в корзине (Shopkeeper)

Опубликовано: 20 Мар 2016

Для одного из сайтов понадобилось сделать плагин, который будет считать скидку в зависимости от количества товаров (пересчитываем в корзине). Подобное решение есть для minishop2, но так как к тому времени весь магазин уже был собран на Shopkeeper было легче сделать подобный плагин. На форуме Shopkeeper были представлены разрозненные решения, которые не до конца соответствовали моим нуждам, соответственно я взяла некоторые идеи оттуда, добавила немного от себя и использовала. Огромное спасибо авторам идей, и надеюсь, мое решение так же кому-нибудь поможет.

Плагин discount (событие OnSHKbeforeCartLoad)

/*
OnSHKbeforeCartLoad
*/
$e = &$modx->event;
//////////////////////////////////////
//OnSHKbeforeCartLoad
//////////////////////////////////////

if ($e->name == 'OnSHKbeforeCartLoad'){
$output = "";
global $modx;

if(!empty($_SESSION['shk_order'])){

$purchases = $_SESSION['shk_order'];
 foreach($purchases as $key => $product){

      $id = $product['id']; if (empty($id)) break;
      $count=$product['count'];
        if (isset($id_tmp[$id])) {
            $count= $id_tmp[$id]['count']+$count;
            $uns=$id_tmp[$id]['id'];
            unset ($_SESSION['shk_order'][$uns]);

        }
       $id_tmp[$id]['id']= $key;
        $id_tmp[$id]['count']=$count;
//Переменные price, price_5, price_10, price_30, price_100, price_500 –соответствуют tv товара
         $tv = $modx->getObject('modTemplateVar',array('name'=>'price'));
         $price = $tv->getValue($id);
         $tv = $modx->getObject('modTemplateVar',array('name'=>'price_5'));
         $price_5 = $tv->getValue($id);
         $tv = $modx->getObject('modTemplateVar',array('name'=>'price_10 '));
         $price_10 = $tv->getValue($id);
         $tv = $modx->getObject('modTemplateVar',array('name'=>'price_30 '));
         $price_30 = $tv->getValue($id);
         $tv = $modx->getObject('modTemplateVar',array('name'=>'price_100 '));
         $price_100 = $tv->getValue($id);
         $tv = $modx->getObject('modTemplateVar',array('name'=>'price_500 '));
         $price_500 = $tv->getValue($id);

if ($count <= 9) $price = $price_5;
  elseif ($count <= 29){
      if ($price_10 > 0) $price = $price_10;
      elseif ($price_5 > 0) $price = $price_5;
  }
  elseif ($count <= 99){
      if ($price_30 > 0) $price =  $price_30;
      elseif ($price_10 > 0 ) $price =  $price_10;
      elseif ($price_5 > 0 ) $price =  $price_5;
  }
  elseif ($count <= 499){
      if         ($price_100 > 0) $price = $price_100;
       elseif     ($price_30 > 0) $price =  $price_30;
      elseif     ($price_10 > 0) $price =  $price_10;
      elseif     ($price_5 > 0) $price =  $price_5;
  }
  elseif ($count >= 500){
      if         ($price_500 > 0) $price =  $price_500;
      elseif     ($price_100 > 0) $price = $price_100;
      elseif     ($price_30 > 0) $price =  $price_30;
      elseif     ($price_10 > 0) $price =  $price_10;
      elseif     ($price_5 > 0) $price =  $price_5;
  }
       $price = $price;
        $_SESSION['shk_order'][$key]['price']=$price;
        $_SESSION['shk_order'][$key]['count']=$count;
    }
  }
}

И еще один момент, при пересчете цен я заметила, что не обновляется общая цена за всю корзину, поэтому ее нужно обновить

<script type="text/javascript">
function SHKloadCartCallback(){
      SHK.refreshCart();
}
$(document).bind('ready',SHKloadCartCallback);
</script>

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


Оставить комментарий




Разрешённые теги: <b><i><br>Добавить новый комментарий: