我目前正在为在线商店使用按重量计算的表格费率,但我需要自定义计算的完成方式。
目前,邮费是由订单的总重量决定的,但我想计算的只是购物车中最重的物品的邮寄费用。
你知道我如何覆盖这个模块所做的计算吗?帮助会让我非常感激。
提前致谢。
覆盖用于计算这些速率的 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!)。
希望有帮助!
谢谢,乔