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 に答える