2

我知道有很多类似问题的答案和问题,但我会在开始时告知。我问的不是我自己的运输方式,而是所有可用的方式。

我找到了一个我曾经做过的代码,奇怪的是:它工作了一段时间 - 不知道我改变了什么,它停止了。

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吗?

4

2 回答 2

1

如果您配置运费税,您的方法将失败。

尝试覆盖Mage_Shipping_Model_Rate_Result::append方法。

于 2019-08-19T11:05:03.730 回答
0

首先我删除了代码:

$address->setShippingAmount($price);
$address->setBaseShippingAmount($price);

这迫使附加价格作为总运费在摘要中可见,而不是附加价格+运输方式价格。

还补充说:

$address->setCollectShippingRates(false);

就在之前:

$rates = $address->collectShippingRates()
                 ->getGroupedAllShippingRates();

这解决了我没有更新价格的问题。

额外的:

相同的观察者可用于禁用某些速率。只需使用:

$rate->isDeleted(true);
于 2013-11-07T08:46:14.103 回答