如何在发货方式选择后更改/更新运费价格

时间:2012-08-06 15:09:56

标签: php zend-framework magento observer-pattern magento-1.6

我正在尝试在创建发货模块后按照此blog中的说明为magento 1.7.x.x创建自定义(pickship)送货方式。我希望能够根据用户选择的运输方式更改运费。

制备

1。)为自定义(pickship)运输方法创建了一个表单块 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());

}

问题:

我是否使用正确的观察者/方法完成此任务?它只适用于一步 - 一旦我点击'继续'下订单,它就会重置为默认价格。我设定交货价格的方式可能有误。你能让我走上正轨还是建议解决方案?

2 个答案:

答案 0 :(得分:1)

如果您想为自定义解决方案编写代码,可以在此处找到一个很好的教程:Custom shipping method in Magento

基本上你不应该使用观察者,而应该在你的模块中定义一个带有两种运输方式的自定义载体。

在您的模型中,使用函数getAllowedMethods()来声明您的送货方式,然后在功能collectRates()中为每种送货方式提供费率。

答案 1 :(得分:0)

如果您的主要目标是提供多种不同价格的送货方式,并且可以信任第三方模块,那么您可以尝试使用WebShopApps中的免费MatrixRate

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

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