我想防止用户添加相同的产品两次或更多(在后端和前端),同时不限制他们订购任意数量的商品。
例如,假设有 SKU ABCD123的产品- 我如何防止用户将其两次添加到购物车中?而是允许用户添加一次并让他们更新订购的数量?
我在 magento 中查看了如何防止在购物车中多次添加相同的产品;但是建议的解决方案是指限制购物车中的商品总数或使用特定库存配置更新每个产品。
有没有办法通过修改购物车代码来做到这一点?
我想防止用户添加相同的产品两次或更多(在后端和前端),同时不限制他们订购任意数量的商品。
例如,假设有 SKU ABCD123的产品- 我如何防止用户将其两次添加到购物车中?而是允许用户添加一次并让他们更新订购的数量?
我在 magento 中查看了如何防止在购物车中多次添加相同的产品;但是建议的解决方案是指限制购物车中的商品总数或使用特定库存配置更新每个产品。
有没有办法通过修改购物车代码来做到这一点?
如果产品有自定义选项并且如果客户可以选择另一个自定义选项,那么在这种情况下产品数量将不会更新,如果产品很简单,那么每次客户添加到购物车产品时数量都会更新
您可以使用事件观察器检查具有相同 sku 的产品是否在购物车中。
您可以使用checkout_cart_product_add_before
事件检查该产品是否已存在于您的购物车中。下面是关于如何在 magento 中创建观察者的代码的亮点。
你的配置文件是这样的
<config>
...
<frontend>
...
<events>
<checkout_cart_product_add_after>
<observers>
<unique_event_name>
<class>{{modulename}}/observer</class>
<method>CheckItem</method>
</unique_event_name>
</observers>
</checkout_cart_product_add_after>
</events>
...
</frontend>
...
并在您的观察者中检查您的逻辑是否在购物车中
class <namespace>_<modulename>_Model_Observer
{
public function CheckItem(Varien_Event_Observer $obs)
{
// Get the quote item
$item = $obs->getQuoteItem();
//and put your logic here to match item with sku
}
}
如果你有自己的模块,你可以尝试覆盖addAction
CartController 中的:
class MyModule_MyCheckout_CartController extends Mage_Checkout_CartController
{
public function addAction()
{
// initialize product to add to cart
$product = $this->_initProduct();
$items = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();
foreach($items as $item)
{
if($item->getSku() == $product->getSku()
{
//add the same item
Mage::getSingleton('checkout/session')->getQuote()->addItem($item);
// set a message in the session
return $this->_redirectReferer(Mage::helper('checkout/cart')->getCartUrl());
}
}
parent::addAction();
}
}
本质上,当你发现添加了一个 SKU 时,你会在你的购物车中循环,当你发现一个 SKU 时返回。
在您config.xml
的 中,必须像这样覆盖此模块的路由:
//<global>-Context
<rewrite>
<mymodule_mycheckout_cart>
<from><![CDATA[#^/checkout/cart/#]]></from>
<to>/mycheckout/cart/</to>
</mymodule_mycheckout_cart>
</rewrite>