我知道有很多答案和类似问题的问题,但我会在开始时通知。我不是问我自己的运输方法,而是关于所有可用的方法。
我找到了一个我曾经做过的代码,奇怪的是:它工作了一段时间 - 不知道我改变了它停止了。
class Oversizeshipping_Model_Observer
extends Varien_Event_Observer
{
public function appendPriceToShipping($observer)
{
$address = $observer->getQuoteAddress();
#Mage::log($address->getAddressType(), Zend_Log::DEBUG, 'event.log', true);
if($address->getAddressType() === $address::TYPE_SHIPPING){
$price = 0;
$resource = Mage::getResourceModel('catalog/product');
foreach($address->getAllItems() as $item) {
try {
$oversizePrice = $resource->getAttributeRawValue($item->getProduct()->getId(), 'oversize_shipping_price', $item->getStoreId());
} catch( Exception $e ) {
$oversizePrice = 0;
}
if($oversizePrice > 0) {
$price += $oversizePrice;
}
}
$address->setShippingAmount($price);
$address->setBaseShippingAmount($price);
$rates = $address->collectShippingRates()
->getGroupedAllShippingRates();
foreach ($rates as $carrier) {
foreach ($carrier as $rate) {
$rate->setPrice((float)$rate->getPrice()+$price);
$rate->save();
}
}
$address->save();
}
}
}
在sales_quote_address_collect_totals_after上触发了该观察者方法。 正如我之前提到的,它起作用(即使是免费送货方式也加价),但它停止了。
有人能给我一个错字,错过方法电话或smth吗?
答案 0 :(得分:0)
首先我删除了代码:
$address->setShippingAmount($price);
$address->setBaseShippingAmount($price);
这迫使额外的价格在总结中显示为总运费,而是额外的价格+运费方式价格。
还补充说:
$address->setCollectShippingRates(false);
就在之前:
$rates = $address->collectShippingRates()
->getGroupedAllShippingRates();
这解决了我的问题,没有更新价格。
<强>附加强>
可以使用相同的观察者来禁用某些速率。只需使用:
$rate->isDeleted(true);
答案 1 :(得分:0)
如果您配置运费税,您的方法将会失败。
尝试改写Mage_Shipping_Model_Rate_Result::append
方法。