我有一家网上商店出售葡萄酒并通过瓶子出售。但是,在任何SKU组合中,我只能以6的倍数发货,即6,12,18,24等。
我尝试过Config->广告资源 - >“购物车中允许的最低数量”,它适用于单个产品,但不适用于结帐时的总数量。
是否有办法(通过扩展程序,代码或管理员)在结账时配置规则,以便不管不同SKU的总数量必须是6的倍数?
答案 0 :(得分:0)
afaik not,但它应该很容易做到。
写一个观察者,听取controller_action_predispatch_checkout_onepage_index
检查数量是6的倍数,如果没有添加错误并重定向到购物车
您可以考虑在controller_action_predispatch_checkout_cart_index
中查看它,以便在购物车页面上显示警告,也可以将按钮设为灰色。
答案 1 :(得分: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);
}
答案 2 :(得分: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>