2

我目前正在为在线商店使用按重量计算的表格费率,但我需要自定义计算的完成方式。

目前,邮费是由订单的总重量决定的,但我想计算的只是购物车中最重的物品的邮寄费用。

你知道我如何覆盖这个模块所做的计算吗?帮助会让我非常感激。

提前致谢。

4

1 回答 1

5

覆盖用于计算这些速率的 Magento 类Mage_Shipping_Model_Shipping。当提出费率请求时,使用一个对象调用此类的collectRates方法Mage_Shipping_Model_Rate_Request,该对象具有预先填充的项目和权重。然而,通过使用我们的覆盖来子类化该类,我们可能会很棘手并获得我们想要的速率。

class MyNamespace_MyModule_Model_Shipping extends Mage_Shipping_Model_Shipping {

    public function collectRates(Mage_Shipping_Model_Rate_Request $request) {
        $maxWeight = 0;
        foreach($request->getAllItems() as $item) {
            $maxWeight = max($maxWeight, $item->getRowWeight());
        }
        $request->setPackageWeight($maxWeight);

        return parent::collectRates($request);
    }
}

请注意,这里我们已经最大限度地减少了更改代码的数量,并且可以以低风险干净地删除我们的模块(我们甚至可以升级 Magento!)。

希望有帮助!

谢谢,乔

于 2011-03-16T14:06:55.087 回答