我在购物车中有5件商品ID相同。
我想将前4个商品的价格设为9.99,第5个商品的价格将原价的20%折扣。
我已经将前4个项目设置为club_item,将第5个产品设置为其他产品(使用我的自定义表格)。
如果我只添加4个商品,则所有4个商品的价格都正确显示为9.99;
但是当我添加所有5个项目时,所有5个项目的价格都在变化,这是最后一个项目的价格.意味着所有项目都显示价格=(actual_productprice - 20%折扣)。
如何仅显示第5项的不同价格。
我有下面的事件
<events>
<sales_quote_add_item>
<observers>
<Company_Module_Model_Observer>
<type>singleton</type>
<class>Company_Module_Model_Observer</class>
<method>updatePrice</method>
</Company_Module_Model_Observer>
</observers>
</sales_quote_add_item>
</events>
我的观察员功能是: -
public function updatePrice($observer)
{
$event = $observer->getEvent();
$product = $event->getProduct();
$quote_item = $event->getQuoteItem();
$productId = $quote_item->getProductId();
if(Mage::getSingleton('customer/session')->isLoggedIn()) {
$customerData = Mage::getSingleton('customer/session')->getCustomer();
$customer_id = $customerData->getId();
}
$_customModel = Mage::getModel('custom/custom')->getCollection()
->addFieldToFilter('product_id', array('eq'=>$productId))
->addFieldToFilter('customer_id', array('eq'=>$customer_id));
$_customData = $_customModel->getData();
$actualPrice = $quote_item->getProduct()->getFinalPrice();
/* this is for separating each line item in cart */
$quote_item->addOption(array(
"code" => "random",
"value" => serialize(array(time()))
));
$new_price = 0;
foreach ($_customData as $_customDataValue) {
$_isClubProductId = $_customDataValue['product_id'];
$_isClubItem = $_customDataValue['is_club_item'];
/* Here I am differentiting the products with variable $_isClubItem */
if($productId == $_isClubProductId && $_isClubItem == 1){
$customPrice = 9.99;
$new_price = round($customPrice, 4);
}else{
$new_price = (float)number_format($actualPrice * ((100-20) / 100),2);
}
}
$quote_item->setOriginalCustomPrice($new_price);
//$quote_item->save();
$quote_item->getQuote()->save();
}
最新回答
- 2019-12-51 #
我认为你可以用购物车价格规则来做到这一点.您可以将要求设置为购物车中的最小数量4,并对产品应用20%的折扣.价格规则仅适用于第五个产品及以后的产品。