1

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

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

或者....

如果当产品缺货时,不是禁用产品,而是有办法清除该产品的所有客户购物车。

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

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

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

4

1 回答 1

4

您需要为此任务开发扩展。为事件 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 会通知他们该产品不再有库存。这必须足够了。

于 2012-05-02T15:38:13.370 回答