3

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

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

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

4

3 回答 3

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);
}
于 2013-01-14T20:51:48.590 回答
0

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

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

您也可以考虑将其签入controller_action_predispatch_checkout_cart_index以在购物车页面上显示警告,并且可能会使按钮变灰。

于 2013-01-14T20:44:26.187 回答
0

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

话虽如此,我们可以连接到sales_quote_save_before事件中进行检查并相应地调整数量。

观察者.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 为增量,然后相应地调整数量。我们甚至可以输出通知,以便客户了解细微的变化。

配置文件

<?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>
于 2013-01-15T01:01:12.717 回答