西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > magento教程 >

Magento允许的最大订单金额

时间:2017-01-13 11:17来源:未知 作者:好模板 点击:
最近我在做的一个Magento项目中,有一个小的防欺诈功能。这个功能就是允许的最大订单金额。也许一开始听起来很奇怪,怎么会有人想限制订单的最大金额呢?鉴于该商店销售产品的性

最近我在做的一个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不更新购物车。

(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容