Плагин расчета скидки от суммы заказа

Доброго всем дня.
Стоит следующая задача:
Есть несколько цен: цена1 цена2 и т.д.
Необходимо сделать плагин, который будет менять цену заказе в зависимости от цены.
Например, если стоимость всего заказа достигает 30000 р. нужно подставить на все позиции заказа вместо цена1 цену2.
Вот то, что пока написал, но не работает:

/**
* 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*/
if ($modx->event->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;
$price = Get_Price($id,$price_tota);
$_SESSION['shk_order'][$key]['price']=$price;
 }
}
$modx->event->_output = '';
return '';
}

Подскажите в какую сторону смотреть

Изменение цены реализовал, все корректно.
Вот код плагина:

<?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*/
if ($modx->event->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;
$price = Get_Price($id,$price_total);
$_SESSION['shk_order'][$key]['price']=$price;
 }
}
$modx->event->_output = '';
return '';
}

Теперь другой вопрос.
При пересчете корзины не выводится сумма заказа. Знатоки, как исправить?.

Решил вопрос, но через костыль. Почему-то сумма заказа из плагина не выводится в плэйсхолдер [[+price_total]], зато в любой другой за милую душу.
Код плагина ниже, может кому пригодится:

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

Прошу прощения за говнокод, приведу в порядок в ближайшее время.

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.