我正在为客户编写新的送货方式;我的运费计算很好,并且它们出现在“运输方式”步骤中 - 但是,我想:
a)在用户点击第一个(结算)标签中的“继续”按钮触发的billing.save()后,强制“发货信息”标签打开,即使他们选择发货到帐单地址;和
b)在发货信息标签中添加“收货发货”,“运输保证”和“尾货卡车”的选项 - 在重新计算运费报价时将考虑到这些选项。
在b)部分中,我假设我使用/ layout中的xml配置文件覆盖shipping.phtml模板,然后在collectRates()方法中查找这些添加的帖子字段。
提前致谢!
答案 0 :(得分:2)
至于部分a),您需要覆盖控制器Mage_Checkout_OnepageController
。为此,创建自己的模块(我假设你知道如何做到这一点),在app / code / local / YourModule / etc / config.xml中你应该有这个部分:
<config>
...
<frontend>
<routers>
<checkout>
<args>
<modules>
<YourModule_Checkout before="Mage_Checkout">YourModule_Checkout</YourModule_Checkout>
</modules>
</args>
</checkout>
</routers>
</frontend>
</config>
然后在app / code / local / YourModule / controllers / OnepageController.php中要覆盖行为,因此当您点击保存结算按钮时,您将始终登陆发货页面。
include_once("Mage/Checkout/controllers/OnepageController.php");
class YourModule_Checkout_OnepageController extends Mage_Checkout_OnepageController
{
public function saveBillingAction()
{
if ($this->_expireAjax()) {
return;
}
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost('billing', array());
$customerAddressId = $this->getRequest()->getPost('billing_address_id', false);
if (isset($data['email'])) {
$data['email'] = trim($data['email']);
}
$result = $this->getOnepage()->saveBilling($data, $customerAddressId);
if (!isset($result['error'])) {
/* check quote for virtual */
if ($this->getOnepage()->getQuote()->isVirtual()) {
$result['goto_section'] = 'payment';
$result['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml()
);
} else { // Removed elseif block here which usually skips over shipping if you selected to use the same address as in billing
$result['goto_section'] = 'shipping';
}
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
}
然后对于b)部分,你有两个选择。您指出要么使用XML布局系统为shipping.phtml设置不同的模板:
<checkout_onepage_index>
<reference name="checkout.onepage.shipping">
<action method="setTemplate">
<new>my_shipping.phtml</new>
</action>
</reference>
</checkout_onepage_index>
甚至更容易,您使用自定义设计文件夹覆盖shipping.phtml模板。
为了评估您的自定义数据,模型Mage_Checkout_Model_Type_Onepage
处理saveShipping()
方法中的数据,因此我想这将是寻找实现自定义逻辑的好点。