首页 文章

Magento购物车最低数量

提问于
浏览
3

我有一个在线商店出售葡萄酒并通过瓶子出售 . 但是,在任何SKU组合中,我只能以6的倍数发货,即6,12,18,24等 .

我尝试过Config-> Inventory - >“购物车中允许的最低数量”,它适用于单个产品,但不适用于结账时的总数量 .

是否有办法(通过扩展,代码或管理员)在结账时配置规则,以便不管不同SKU的总数量必须是6的倍数?

3 回答

  • 0

    afaik没有,但应该很容易做到 .

    写一个观察者,监听 controller_action_predispatch_checkout_onepage_index 检查数量是6的倍数,如果没有添加错误并重定向到购物车

    您也可以考虑在 controller_action_predispatch_checkout_cart_index 中检查它,以便在购物车页面上显示警告,也可以在按钮上显示灰色 .

  • 0

    您可以创建自定义模块,也可以在单页结帐的登录页面上创建

    if(Mage::helper('checkout/cart')->getCart()->getItemsCount() % 6 != 0){
       Mage::getSingleton('customer/session')->addError('Item in your cart must be multiple of 6');
       $url = Mage::getUrl('checkout/cart')
       Mage::app()->getFrontController()->getResponse()->setRedirect($url, 301);
    }
    
  • 0

    虽然其他答案有效,但也许最好的方法是检查报价保存,这样如果客户调整其购物车中的数量,它将会四舍五入,他们将看到并理解变化 . 当顾客购买他们不知道他们购买的东西时,他们会发出愤怒的电话,这并不好玩 .

    话虽如此,我们可以挂钩 sales_quote_save_before 事件进行检查并相应地调整数量 .

    Observer.php

    <?php
    
    class Yrcrz_WineQty_Model_Observer
    {
        public function sales_quote_save_before(Varien_Event_Observer $observer)
        {
            $quote = $observer->getQuote();
            $items = $quote->getAllItems();
            $message = false;
            foreach ($items as $item) {
                $qty = $item->getQty();
                if ($qty % 6 != 0) {
                    if ($qty <= 3) {
                        $newQty = 6;
                    } else {
                        $newQty = round($qty / 6) * 6;
                        $item->setQty($newQty);
                        if (!$message) {
                            $message = Mage::helper('core')->__('Product quantities have been adjusted for case sizes');
                            Mage::getSingleton('core/session')->addNotice($message);
                        }
                    }
                }
            }
        }
    }
    

    我们先获取所有项目,查看数量是否为6,然后相应地调整数量 . 我们甚至可以输出通知,以便客户了解细微的变化 .

    config.xml

    <?xml version="1.0"?>
    <config>
        <modules>
            <Yrcrz_WineQty>
                <version>0.0.1</version>
            </Yrcrz_WineQty>
        </modules>
        <global>
            <events>
                <sales_quote_save_before>
                    <observers>
                        <Yrcrz_WineQty_Observer>
                            <type>singleton</type>
                            <class>Yrcrz_WineQty_Model_Observer</class>
                            <method>sales_quote_save_before</method>
                        </Yrcrz_WineQty_Observer>
                    </observers>
                </sales_quote_save_before>
            </events>
        </global>
    </config>
    

相关问题