选择运输方式后如何更改/更新运费


how to change/update shipping price after shipping method choose

创建运输模块后,我正在尝试按照本博客中的说明为 magento 1.7.x.x 创建自定义(拣货)运输方法。我希望能够根据用户选择的运输选项更改运费.

制备:

1.) 为自定义(拣货)运输方式创建了表单块
2.) 创建一个具有三个值的商店名称(可以是任何文本)下拉/选择元素:store1、store2、store3。3.) 默认运费通过运输配置设置为 1.00 美元(仅用于测试目的)。

现状:

1.)完成所需的过程后,当我在单页结帐中选择运输方式时,我看到一个包含三个选项的选择元素,并且运费设置为默认价格。

目标:

如果用户选择第一个选项,我希望运费更新为 10.00 美元,如果用户选择第二个选项,则更新为 20.00 美元。

我的尝试:

经过几个小时的谷歌搜索,我对观察者模型进行了一些更改:

NameSpace_ModuleName_Model_Observer extends Varien_Object {
public function saveShippingMethod($observer) {
   $request = $evt->getRequest();
   $quote = $evt->getQuote();
   $pickship = $request->getParam('shipping_pickship', false);
   $rates = $quote->getShippingAddress()->getShippingRatesCollection();
   $rate = $rates->getFirstItem();
   if($pickship['select_element'] == 1) {
     $rate->setPrice(10);
   } elseif($pickship['select_element'] == 2) {
     $rate->setPrice(20);
   }
   //Mage::log($rate->getPrice());
}

问题:

我是否为此任务使用了正确的观察器/方法?它仅适用于一个步骤 - 一旦我单击"继续"下订单,它就会重置为默认价格。我设置送货价格的方式可能是错误的。你能让我走上正确的轨道或提出解决方案吗?

如果你想编写你的定制解决方案,你可以在这里找到一个很好的教程: Magento中的自定义运输方式

基本上,您不应该使用观察器,而是应该在模块中定义具有两种运输方式的自定义承运人。

在您的模型中,使用函数 getAllowedMethods() 声明您的运输方式,然后在函数中collectRates()给出每种运输方式的费率。

如果您的主要目标是提供多种不同定价的运输方式,并且可以信任第三方模块,则可以尝试免费的MatrixRate 来自WebShopApps

http://www.magentocommerce.com/magento-connect/webshopapps-matrixrate-1-multiple-table-rates-extension.html

还有其他模块,但这是我尝试过的,它按我的预期工作。