This is an old revision of the document!
Для того, чтобы сделать скидку, зависящую от количества товаров в заказе, необходимо:
SHOP_ITEM_DISCOUNT_ID
и задать ей значение, равное коду добавленной скидки.show
класса Shop_Cart_Controller_Show
в настройках ТДС корзины с помощью наследования, код метода взять из стантартного класса и внести следующие изменения:<?php class Shop_Cart_Controller_Show_Extended extends Shop_Cart_Controller_Show { // ... public function show() { // ... $aShop_Purchase_Discounts = $oShop_Purchase_Discount_Controller->getDiscounts(); foreach ($aShop_Purchase_Discounts as $oShop_Purchase_Discount) { /** * * Пересчет скидки по формуле: количество товаров * SHOP_ITEM_DISCOUNT * * @author Zasorin Maksim, KAD Systems (©) 2015 * @date 23-09-2015 * Начало >> */ if ( defined('SHOP_ITEM_DISCOUNT_ID') && $oShop_Purchase_Discount->id == SHOP_ITEM_DISCOUNT_ID ) { $discountAmount = $oShop_Purchase_Discount->getDiscountAmount(); $oShop_Purchase_Discount->discountAmount($discountAmount * $quantity); } /** * << Конец * @author Zasorin Maksim, KAD Systems (©) 2015 * @date 23-09-2015 */ $this->addEntity($oShop_Purchase_Discount->clearEntities()); $totalDiscount += $oShop_Purchase_Discount->getDiscountAmount(); } // ... return Core_Controller::show(); } // ... }
_addPurchaseDiscount
в обработчиках платежных систем, код взять из стандартного обработчика и внести следующие изменения:<?php class Shop_Payment_System_HandlerXX extends Shop_Payment_System_Handler { //... protected function _addPurchaseDiscount($amount, $quantity) { // ... $aShop_Purchase_Discounts = $oShop_Purchase_Discount_Controller->getDiscounts(); foreach ($aShop_Purchase_Discounts as $oShop_Purchase_Discount) { /** * * Пересчет скидки по формуле: количество товаров * SHOP_ITEM_DISCOUNT * * @author Zasorin Maksim, KAD Systems (©) 2015 * @date 23-09-2015 * Начало >> */ if ( defined('SHOP_ITEM_DISCOUNT_ID') && $oShop_Purchase_Discount->id == SHOP_ITEM_DISCOUNT_ID ) { $discountAmount = $oShop_Purchase_Discount->getDiscountAmount(); $oShop_Purchase_Discount->discountAmount($discountAmount * $quantity); } /** * << Конец * @author Zasorin Maksim, KAD Systems (©) 2015 * @date 23-09-2015 */ $oShop_Order_Item = Core_Entity::factory('Shop_Order_Item'); $oShop_Order_Item->name = $oShop_Purchase_Discount->name; $oShop_Order_Item->quantity = 1; $discountAmount = $oShop_Purchase_Discount->getDiscountAmount(); // ... } // ... }