【问题标题】:Magento set product status to 'Disabled' when qty = '0' (Out of stock)当 qty = '0'(缺货)时,Magento 将产品状态设置为 'Disabled'
【发布时间】:2012-05-02 00:48:19
【问题描述】:

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

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

或者....

如果不是禁用产品,而是在产品缺货时,有一种方法可以清除所有客户的购物车该产品的购物车。

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

那么有没有一种方法可以设置在商品缺货时从所有客户购物车中删除该产品?

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

【问题讨论】:

    标签: magento


    【解决方案1】:

    您需要为此任务开发扩展。 为事件 sales_order_save_after 创建一个观察者并检查数量就足够了。如果为 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 会通知他们该产品不再有库存。这必须足够。

    【讨论】:

    • 感谢代码工作。我想到了我今天帖子的第二部分。基本上我正在处理每日交易网站(每天 1 或 2 种产品,持续 24 小时)。这就是我在我的网站上的全部内容。所以它不像一个拥有大量产品的真正的 Magento 商店。我相信如果他们的购物车中有任何产品,将产品设置为“禁用”也会清除购物车。我正在使用一步结帐扩展程序,据我所见,当我尝试处理交易时,它没有通知我产品缺货。当然,这都是在测试帐户上
    • 如果我是你,我会开发一个扩展程序来通知客户,他的购物车中的产品现已售罄并已被删除。但是你也应该先测试它是否真的在不告诉客户的情况下从你的购物车中删除了禁用的产品。
    猜你喜欢
    • 2015-04-02
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2012-04-16
    • 1970-01-01
    • 2011-05-26
    • 2012-06-04
    相关资源
    最近更新 更多