我希望能够根据购物车中的商品切换使用的送货方式。哪里是“检查”这个并抓住正确的运输方式的最佳地点?
它的工作方式是使用标准的运输方法,然后,如果购物车中有某些物品,则另一种方法将覆盖其他方法。
我想我可以通过黑客攻击各个发货模块来做到这一点,但我想以“正确”的方式做到这一点。
答案 0 :(得分:3)
运输方法在Mage_Shipping_Model_Carrier_Abstract中内置了方法,它们都扩展了:
public function isActive();
扩展您的送货方式并将您的逻辑添加到该方法,不要忘记调用parent :: isActive();第一
答案 1 :(得分: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函数的开头。