Столкнулся с такой проблемой, делал скидку по примеру статьи:
http://wiki.umisoft.ru/%D0%A1%D0%BA%D0%B8%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%82%D0%BE%D0%B2%D0%B0%D1%80_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%8D%D1%82%D0%BE%D0%B3%D0%BE_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0_%D0%B2_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B5 (http://wiki.umisoft.ru/%D0%A1%D0%BA%D0%B8%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%82%D0%BE%D0%B2%D0%B0%D1%80_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%8D%D1%82%D0%BE%D0%B3%D0%BE_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0_%D0%B2_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B5)
Но возникла проблема, на одном из проектов цена у товаров стоит нулевая "0", и изменяется при помощи опционных свойств.
Проблема в том что скидка не срабатывает на такие товары (у которых поле price равно "0"). Если цена стоит выше "0" и добавляются опц.свойства то всё норм.
В самом правиле речь идет только о количестве ...
<?php
class countsDiscountRule extends discountRule implements itemDiscountRule {
public function validateItem(iUmiHierarchyElement $orderItem) {
$itemsCount = '';
$emarket = cmsController::getInstance()->getModule('emarket');
if(!$emarket) return;
//текущая корзина
$order = $emarket->getBasketOrder();
foreach($order->getItems() as $orderItemBasket) {
$object_id = $orderItemBasket->getItemElement()->getId();
if($object_id == $orderItem->id){
$itemsCount = $orderItemBasket->getAmount();
break;
}
}
// Если кол-во товаров в корзине >= условия в скидке то возвращаем true
if($itemsCount >= $this->counts){
return true;
}else{
return false;
}
}
};
?>
хм.. прописать пути.
при выводе товаров происходит refresh() (файл /classes/modules/emarket/classes/orders/orderItem.php)
там есть строчка которая определяет скидку товара в корзине
$discount = itemDiscount::search($element);
itemDiscount::search это функция search() в (файле /classes/modules/emarket/classes/discounts/discounts/itemDiscount.php)/ Вней есть тот самый блок
~~~~~~~~~~
switch(sizeof($discounts)) {
case 0: return null;
default:
$elementPrice = $element->price;
$maxDiscount = null; $minPrice = null;
foreach($discounts as $i => $discount) {
$price = $discount->recalcPrice($elementPrice);
if($price <= 0) continue;
if(is_null($minPrice) || $minPrice > $price) {
$minPrice = $price;
$maxDiscount = $discount;
}
}
return $maxDiscount;
}
~~~~~~~~~~
Думаю, там он и отпадает