创建运输模块后,我正在尝试按照本博客中的说明为 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
还有其他模块,但这是我尝试过的,它按我的预期工作。