【问题标题】:Magento shopping cart minimum quantityMagento 购物车最小数量
【发布时间】:2012-12-28 20:55:40
【问题描述】:

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

我已经尝试过配置->库存->“购物车中允许的最小数量”它适用于单个产品,但不适用于结帐时的总数量。

有没有办法(通过扩展程序、代码或管理员)在结帐期间配置规则,使得无论不同 SKU 的总数量都必须是 6 的倍数?

【问题讨论】:

    标签: magento shopping-cart


    【解决方案1】:

    afaik 不是,但应该很容易做到。

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

    您也可以考虑在controller_action_predispatch_checkout_cart_index 中进行检查,以便在购物车页面上显示警告,并可能使按钮变灰。

    【讨论】:

      【解决方案2】:

      您可以创建一个自定义模块或在您的单页结帐的登录页面上做

      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);
      }
      

      【讨论】:

        【解决方案3】:

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

        话虽如此,我们可以挂钩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>
        

        【讨论】:

          猜你喜欢
          • 2014-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-06
          • 1970-01-01
          • 1970-01-01
          • 2013-05-22
          相关资源
          最近更新 更多