Magento允许的最大订单金额
最近我在做的一个项目中,有一个小的防欺诈功能。这个功能就是允许的最大订单金额。也许一开始听起来很奇怪,怎么会有人想限制订单的最大金额呢?鉴于该商店销售产品的性质(这里不能透露),这个功能要求似乎很合理。如果你看下Magento后台管理,你会在System > Configuration > Sales > Sales > Minimum Order Amount看到与它相反的功能。
最小订单金额功能和我们最大订单金额略有不同。最大的区别就是,你无法添加超出金额的商品到购物车。那么我们该如何做呢?答案很简单事件/监听(event/observer)系统。我们所要做的是找到相对应的时间并挂钩一个观测者。经过仔细追查,一些尝试和失败以后,最合乎逻辑的事件似乎是:sales_quote_save_before。此外,只实现最大订单金额功能在前端是有道理的,因为我们不希望限制管理员创建订单。考虑到这一点,我们只需要添加以下代码到我们扩展的config.xml文件中:
<config>
<frontend>
<events>
<sales_quote_save_before>
<observers>
<alwayly_maxorderamount_enforceSingleOrderLimit>
<class>alwayly_maxorderamount/observer</class>
<method>enforceSingleOrderLimit</method>
</alwayly_maxorderamount_enforceSingleOrderLimit>
</observers>
</sales_quote_save_before>
</events>
</frontend>
<config>
创建我们Observer.php,在类中添加逻辑:
class Alwayly_MaxOrderAmount_Model_Observer
{
private $_helper;
public function __construct()
{
$this->_helper = Mage::helper('alwayly_maxorderamount');
}
/**
* No single order can be placed over the amount of X
*/
public function enforceSingleOrderLimit($observer)
{
if (!$this->_helper->isModuleEnabled()) {
return;
}
$quote = $observer->getEvent()->getQuote();
if ((float)$quote->getGrandTotal() > (float)$this->_helper->getSingleOrderTopAmount()) {
$formattedPrice = Mage::helper('core')->currency($this->_helper->getSingleOrderTopAmount(), true, false);
Mage::getSingleton('checkout/session')->addError(
$this->_helper->__($this->_helper->getSingleOrderTopAmountMsg(), $formattedPrice));
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
Mage::app()->getResponse()->sendResponse();
exit;
}
}
}
这个方法的实现在代码的“Mage::getSingleton(‘checkout/session’)->addError() …”这行。这里触发sales_quote_save_before事件,当新添加的商品超过最大订单金额时,Magento不更新购物车。
电商网站开发服务。
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。