我知道我们可以轻松地limit the max quantity of a given product a customer can purchase per order,但是否可以(本机或甚至使用插件)限制每个CUSTOMER的给定产品的最大数量 ??
我不想use a coupon或modify the code:在原生或扩展功能的帮助下,它必须是促销价。
Magento 1.5.1
答案 0 :(得分:5)
本机不可能,但您可以制作一个可以执行此类限制的模块。
您需要创建一个资源模型,该模型将检索未取消且未退还的具有特定产品ID的产品的订单。实际上它只是一个简单的选择销售/订单和销售/ order_item表。资源模型的方法可能如下所示:
public function getPurchasedProductQty(array $productIds, $customerId)
{
$select = $this->_getReadAdapter()->select();
$select
->from(array('order_item' => $this->getTable('sales/order_item')),
array(
'qty' => new Zend_Db_Expr('order_item.ordered_qty - order_item.canceled_qty - order_item.refunded_qty'),
'product_id'))
// Joining order to retrieve info about item and filter out canceled or refunded orders
->join(array('order' => $this->getTable('sales/order')),
'order.entity_id = order_item.order_id',
array())
// Limit it to the current customer
->where('order.customer_id = ?', $customerId)
// Filter out refunded and canceled orders
->where('order.state NOT IN(?)', array(
Mage_Sales_Model_Order::STATE_CLOSED,
Mage_Sales_Model_Order::STATE_CANCELED
))
// Add Product Id Condition
->where('order_item.product_id IN(?)', $productIds);
return $this->_getReadAdapter()->fetchCol($select);
}
然后,当您观察sales_quote_item_collection_products_after_load
事件时,您可以放置自定义逻辑,检查将在购物车中使用的产品的限制,并从已加载的集合中删除这些产品。你应该自己实现这个逻辑。
答案 1 :(得分:0)
假设您正在尝试限制产品数量,则当前登录的注册客户可以添加到购物车中。
(这是一对一的关系,但可以轻松修改以容纳许多不同的产品和每个客户的数量)
创建一个将在客户实体中添加字段的自定义模块,以便管理员可以为每个客户设置适当的数量。
字段名称:[ModuleName] _product_id(请参阅Adding attributes to customer entity)
字段名称:[ModuleName] _max_cart_qty(请参阅Adding attributes to customer entity)
在(将文件复制到本地模板文件夹中)并更新数量输入字段。
/app/design/frontend/base/default/template/catalog/product/view/addtocart.phtml /app/design/frontend/base/default/template/checkout/cart/item/default.phtml
更改
<input type="text" class="input-text qty" name="qty" id="qty" maxlength="12" value="<?php echo $this->getProductDefaultQty() * 1 ?>" title="<?php echo $this->__('Qty') ?>" />
to(添加验证类以确保数量小于或等于)
$addValidationClass = '';
if( Customer is login && ModuleName_product_id == $_product->getId() && [ModuleName]_max_cart_qty > 0){
$addValidationClass = ' validate-digits-range-1-' . [ModuleName]_max_cart_qty
}
<input type="text" class="input-text qty<?php echo $addValidationClass; ?>" name="qty" id="qty" maxlength="12" value="<?php echo $this->getProductDefaultQty() * 1 ?>" title="<?php echo $this->__('Qty') ?>" />
如果你想进行服务器端验证,那么为add to cart事件创建一个观察者,将上述逻辑与当前添加到购物车的项目进行比较
答案 2 :(得分:-1)
以下扩展将有助于实现此目标
https://www.magentocommerce.com/magento-connect/maximum-order-quantity.html
修改强> 在此扩展中给出
商店所有者通常需要在购物车页面上使用自定义消息限制订单产品数量。使用默认管理设置时无法执行此操作。但是,通过使用此扩展,您可以使用自定义错误消息设置产品数量的限制。如果最大数量限制超出限制,则错误消息将显示在购物车页面上。
您可以使用自定义错误消息设置每个产品的最大数量。您可以使用后端选项全局启用/禁用它们。