【发布时间】:2013-01-21 22:07:46
【问题描述】:
我一直在这里寻找、尝试和失败。我想要的是在 Onepage 结帐的运送页面上添加一个复选框,即标准的 magento 结帐。
我想创建一个复选框,以便客户可以检查它是否希望将他们的产品放置在他们的地址上而无需签名。
我一直在搞乱一些旧的“接受条款”复选框,但没有运气。
我希望有人可能不得不进行同样的定制。
【问题讨论】:
标签: magento
我一直在这里寻找、尝试和失败。我想要的是在 Onepage 结帐的运送页面上添加一个复选框,即标准的 magento 结帐。
我想创建一个复选框,以便客户可以检查它是否希望将他们的产品放置在他们的地址上而无需签名。
我一直在搞乱一些旧的“接受条款”复选框,但没有运气。
我希望有人可能不得不进行同样的定制。
【问题讨论】:
标签: magento
您可以通过观察者将首选项保存在checkout/session 中。首先,将复选框添加到运输部分,并为其赋予name=shipping[no_signature] 的属性。然后,创建一个新模块并挂钩到事件controller_action_postdispatch_checkout_onepage_saveShipping,然后使用以下代码:
public function controller_action_postdispatch_checkout_onepage_saveShipping($observer)
{
$params = (Mage::app()->getRequest()->getParams()) ? Mage::app()->getRequest()->getParams() : array();
if (isset($params['shipping']['no_signature']) && $params['shipping']['no_signature']) {
Mage::getSingleton('checkout/session')->setNoSignature(true);
} else {
Mage::getSingleton('checkout/session')->setNoSignature(false);
}
return $this;
}
然后,当即将下订单时,钩入事件sales_order_place_before,您可以像这样为订单添加评论:
public function sales_order_place_before($observer)
{
$order = $observer->getOrder();
if (Mage::getSingleton('checkout/session')->getNoSignature()) {
$order->setCustomerNote('No signature required.');
} else {
$order->setCustomerNote(null);
}
return $this;
}
当您转到“销售”>“订单”时,您应该会在订单上看到一条评论,说明客户是否需要签名。这是假设没有其他模块或自定义代码向订单对象的customer_note 字段注入任何内容。
【讨论】: