当qty ='0'时,Magento将产品状态设置为'Disabled'(缺货)

时间:2012-05-02 00:48:20

标签: magento

我正在尝试使用CE 1.6.2构建Magento商店,当qty ='0'(缺货)时,我需要将产品状态设置为“已禁用”。一旦产品售罄,我需要它自动将状态更改为禁用状态,因为我永远不会再销售此产品。此外,一旦达到某个数据/时间,我还需要它来自动禁用该产品。

我知道Magento提供的选项是在产品售罄后不显示产品,但这不是我想要的。我真的需要它来禁用该产品。

... OR

如果不停用产品,当产品缺货时,有什么方法可以清除此产品的所有客户购物车。

我所看到的问题是,如果顾客在购物车中有此商品而另一位顾客刚购买了最后一件商品,那么第一位顾客仍会在购物车中看到该商品,即使它不允许这些商品结帐(因为它们不再可用)。清空购物车的唯一方法是客户必须手动移除产品。

那么有什么方法可以设置当商品缺货时从所有客户购物车中删除此商品?

我是Magento的新手,所以如果有人能告诉我代码以及如何解决这个问题,我将非常感谢!

1 个答案:

答案 0 :(得分:3)

您需要为此任务开发扩展程序。 为事件sales_order_save_after创建一个Observer并检查数量应该足够了。如果为0,则可以禁用您的产品。

好吧,我会告诉你如何。创建以下文件并清除缓存以使其正常工作(代码未经测试,但应该有效)。

/app/code/local/Sebi/DeactivateOnOutOfStock/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Sebi_DeactivateOnOutOfStock>
            <version>0.1.0</version>
        </Sebi_DeactivateOnOutOfStock>
    </modules>

    <frontend>
        <events>
            <sales_order_save_after>
                <observers>
                    <deactivateonoutofstock>
                        <type>singleton</type>
                        <class>Sebi_DeactivateOnOutOfStock_Model_Observer</class>
                        <method>salesOrderSaveAfter</method>
                    </deactivateonoutofstock>
                </observers>
            </sales_order_save_after>
        </events>
        <routers>
            <Sebi_DeactivateOnOutOfStock>
                <use>standard</use>
                <args>
                    <module>Sebi_DeactivateOnOutOfStock</module>
                    <frontName>DeactivateOnOutOfStock</frontName>
                </args>
            </Sebi_DeactivateOnOutOfStock>
        </routers>
    </frontend>
</config>

/app/code/local/Sebi/DeactivateOnOutOfStock/Model/Observer.php

<?php
class Sebi_DeactivateOnOutOfStock_Model_Observer
{
    public function salesOrderSaveAfter($observer)
    {
        $storeId = 0; //the admin store view, change this if you want to disable only for the store view from which the order came
        $order= $observer->getEvent()->getOrder();

        foreach ($order->getItemsCollection() as $item) {
            $stockQty = (int)Mage::getModel('cataloginventory/stock_item')->loadByProduct($item->getProductId())->getQty();

            if ($stockQty == 0) {
                Mage::getModel('catalog/product_status')->updateProductStatus($item->getProductId(), $storeId, Mage_Catalog_Model_Product_Status::STATUS_DISABLED);
            }
        }

    }
}

/app/etc/modules/Sebi_DeactivateOnOutOfStock.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Sebi_DeactivateOnOutOfStock>
            <active>true</active>
            <codePool>local</codePool>
        </Sebi_DeactivateOnOutOfStock>
    </modules>
</config>
祝你好运!别忘了刷新你的缓存!

编辑:现在看你的编辑。我不会在售罄时从顾客的购物车中移除商品,因为他们会想到错误并尝试在您的商店中找到它。但他们不能。这将非常令人沮丧。如果他们试图订购并且产品在订购时已售罄,Magento会通知他们,该产品已不再有库存。这已经足够了。