Answers:
事件catalog_product_type_prepare_full_options
和catalog_product_type_prepare_lite_options
是你的朋友
<?xml version="1.0"?>
<config>
<modules>
<Fooman_Example>
<version>0.1.0</version>
</Fooman_Example>
</modules>
<global>
<models>
<fooman_example>
<class>Fooman_Example_Model</class>
</fooman_example>
</models>
<helpers>
<fooman_example>
<class>Fooman_Example_Helper</class>
</fooman_example>
</helpers>
</global>
<frontend>
<events>
<catalog_product_type_prepare_full_options>
<observers>
<fooman_example_catalog_product_type_prepare>
<class>Fooman_Example_Model_Observer</class>
<method>catalogProductTypePrepare</method>
</fooman_example_catalog_product_type_prepare>
</observers>
</catalog_product_type_prepare_full_options>
</events>
</frontend>
</config>
然后在您的Observer类中
<?php
class Fooman_Example_Model_Observer
{
public function catalogProductTypePrepare($observer)
{
$quote = Mage::getSingleton('checkout/session')->getQuote();
if($quote->getItemsCount()>=1){
Mage::throwException('You can only buy one product at a time.');
}
}
}
catalog_product_type_prepare_lite_options
对我来说是第一个!做得很好。
不要重写控制器(请不要这样做),而是重写addProduct
方法以解决限制:
class YourCompany_YourModule_Model_Cart extends Mage_Checkout_Model_Cart
{
public function addProduct($productInfo, $requestInfo=null){
if($this->getItemsCount()>1){
Mage::throwException(Mage::helper('checkout')->__('Cannot add item - cart quantity would exceed checkout the limit of %s per person.', 1));
}
parent::addProduct($productInfo, $requestInfo);
}
}
如果想花哨的话,请用替换1
上面的内容,Mage::getStoreConfig('checkout/options/max_cart_qty)
并设置以下模块的config.xml:
<default>
<checkout>
<options>
<max_cart_qty>1</max_cart_qty>
</options>
</checkout>
</default>
现在可以通过XML值控制该值。如果您真的想花哨的话,请将其添加到新模块的system.xml中:
<config>
<sections>
<checkout>
<groups>
<options>
<fields>
<max_cart_qty translate="label">
<label>Maximum Quantity Allowed in Cart (total qty)</label>
<frontend_type>text</frontend_type>
<sort_order>100</sort_order>
<show_in_default>1</show_in_default>
</max_cart_qty>
</fields>
</options>
</groups>
</checkout>
</sections>
</config>
请记住,您需要为<depends>Mage_Checkout</depends>
模块设置a ,以便搭载其预定义的系统配置。
一种可能的方法是重写Mage_Checkout_CartController的addAction。
因此,请检查购物车中是否已有产品,如果显示,则显示相应的错误消息。如果没有,您可以调用正在执行完整添加过程的父方法:
if (count($this->_getCart()->getProductIds()) > 0) {
$this->_goBack();
} else {
parent::addAction();
}
$this->_goBack();
不起作用!我进入if条件,但是产品仍在添加中。
我知道这个话题有点老了,但是我有一个类似的问题。我只想要购物车中的一项,如果客户添加了新项,我想用新项替换旧项。所以我重写的addAction(形容这里是这样的:
public function addAction(){
$items = $this->_getCart()->getItems();
foreach ($items as $item)
{
$itemId = $item->getItemId();
$this->_getCart()->removeItem($itemId);
}
parent::addAction();
}
checkout_cart_product_add_before
,例如markhust.com/2012/