0

我希望能够根据购物车中的物品切换使用哪种运输方式。哪里是“检查”这个并选择正确的运输方式的最佳地点?

它的工作方式是使用标准的运输方式,然后,如果购物车中有某些物品,另一种方法将覆盖另一种方法。

我想我可以通过修改各个运输模块来做到这一点,但我想以“正确”的方式做到这一点。

4

2 回答 2

3

运输方法在 Mage_Shipping_Model_Carrier_Abstract 中内置了它们都扩展的方法:

 public function isActive();

扩展您的运输方法并将您的逻辑添加到该方法中,并且不要忘记调用 parent::isActive(); 第一的

于 2010-12-17T18:40:10.497 回答
0

尝试和尝试就像我实现自定义覆盖一样,我只有在将整个 Tablerates.php 文件复制到 local/Mage/Shipping/Model/Carrier/Tablerates.php 时才能找到成功

isActive() 在那一点上仍然不是“方式”。我不得不在 collectRates() 函数中引入一些代码,如下所示:

       // check the store 
        if (Mage::app()->getStore()->getId() == 2){

            // check for free shipping
            $packageValue = $request->getPackageValueWithDiscount();
            $freeShipping = ($request->getFreeShipping()) || ($packageValue >=  Mage::getStoreConfig("carriers/freeshipping/free_shipping_subtotal", $this->getStore()));
            if($freeShipping)
                return false;

            $foundFlag = false;
            foreach ($request->getAllItems() as $item) {
                $org_product = Mage::getModel('catalog/product')->load($item->getProductId());
                if($org_product->getDeliveryFlag() == "workstationmats")
                {
                    $foundFlag = true;
                }   
            }

            if ($foundFlag == false)
                return false;
        }
        // end shpping mod

它被放置在 collectRates 函数的开头。

于 2010-12-21T21:58:00.460 回答