Magento允许的最大订单金额

redmaomail 2024-07-24 18:12 阅读数 65 #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不更新购物车。

电商网站开发服务


红帽云邮外贸主机

分享到:
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。
    红帽云邮外贸主机
热门
    红帽云邮外贸主机
    红帽云邮外贸主机