Плагин замены цены в зависимости от суммы заказа

Доброго всем дня. 

Итак, мы имеем интернет-магазин на MODX Shopkeeper3, несколько TVпараметров с разными ценами, и суммы при которых нужно сделать скидку нашим клиентам.

Нам необходимо создать плагин и повесить его на событие «OnSHKcalcTotalPrice».

Вот примерный код плагина, который вы можете адаптировать под себя:

<?php
/**
* OnSHKsaveOrder
*  
* @internal    @events OnSHKcalcTotalPrice
*
*/
/*Функция для определения цены исходя из суммы заказанного товара*/

if(!function_exists(Get_Price)){
function Get_Price($id,$price_tota) {
global $modx; 
 $resource = $modx->getObject('modResource',array('id'=>$id));
 $price = $resource->getTVValue('price');//Значение TV-розничная цена
 $price2 = $resource->getTVValue('price_opt1');//оптовая цена при 30000
 $price3 = $resource->getTVValue('price_opt2');//оптовая цена при 60000
 $price4 = $resource->getTVValue('price_opt3');//оптовая цена при 90000
 $minzakaz_price1 = 30000;//опт минимальная цена 1
 $minzakaz_price2 = 60000;//опт минимальная цена 2
 $minzakaz_price3 = 90000;//опт минимальная цена 3

 if ($price_tota < $minzakaz_price1)  $price = $price; //цена до первой оптовой цены
 elseif ($price_tota >= $minzakaz_price1){
 	if ($price2 > 0) $price = $price2; /*цена, если больше или равно 30000 */
 }
 if ($price_tota >= $minzakaz_price2) $price = $price3;
 if ($price_tota >= $minzakaz_price3) $price = $price4;
   return $price;
 }
}
/*Собственно плагин, который повешен на OnSHKcalcTotalPrice*/
$e = &$modx->Event;
if ($e->name == 'OnSHKcalcTotalPrice'){
 if(!empty($_SESSION['shk_order'])){
   $purchases = $_SESSION['shk_order'];
  foreach($purchases as $key => $product){
 $id = $product['id']; 
         if (empty($id)) break;
$id_tmp[$id]['id']= $key;
$tmp_prtotal=$price_total;
$price = Get_Price($id,$tmp_prtotal);
$_SESSION['shk_order'][$key]['price']=$price;
 }
}
$tot=$price_total;
$modx->setPlaceholder('total', "$tot");
}

Обратите внимание, что в последних строках мы выводим сумму заказа в плейсхолдер «total», стандартный плейсхолдер почему-то не работает.

Оставить заявку

Как связаться?

Тел: +7-910-223-20-27
Email: info@groupbw.ru
skype: litvinov.d1