首页>Magento>source

我在购物车中有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-5
    1 #

    我认为你可以用购物车价格规则来做到这一点.您可以将要求设置为购物车中的最小数量4,并对产品应用20%的折扣.价格规则仅适用于第五个产品及以后的产品。

  • 修改购物车规则功能以按原始价格百分比而非产品价格折扣应用折扣
  • database:产品属性保持"无效"状态 在平坦的桌子