2012-05-02 4 views
0

CE 1.6.2を使用してMagentoストアを構築しようとしています。 qty = '0'(在庫切れ)。製品が売り切れになったら、この製品を再び販売することはないので、ステータスを自動的に無効に変更する必要があります。また、一定のデータ/時間に達すると、自動的に製品を無効にする必要があります。Magentoはqty = '0'のときに製品ステータスを 'Disabled'に設定しました(在庫切れ)

Magentoは、売り切れた商品を表示しないようにするオプションを提供していますが、これは私が探しているものではありません。私は本当に製品を無効にする必要があります。

OR ....

代わりに、製品を無効にするの製品が在庫切れの場合は、本製品のすべてのお客様のショッピングカートをクリアする方法がある場合はどう。

私が見ている問題は、顧客がこの商品をショッピングカートに入れていて、もう1人の顧客が最後の商品を購入しただけの場合、最初の顧客はショッピングカートにアイテムを表示しますそれらをチェックアウトすることができます(利用可能ではないため)。カートを空にする唯一の方法は、お客様が手動で製品を取り外さなければならないということです。

私はMagentoを使い慣れているので、誰かに私にコードとその修正方法を教えてもらえれば幸いです。

答えて

3

このタスクの拡張機能を開発する必要があります。 イベント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は製品に在庫がないことを知らせます。これで十分です。

+0

コード作業をありがとう。私は今日の私のポストの第2部について考えました。基本的に私は1日のサイト(24時間の間、1日または2日の製品)で取引をしています。それが私のサイトにあるすべてです。だから、数多くの製品を持った真のマゼンタの店が好きではない。私は、製品を「Disabled」に設定すると、ショッピングカートにその製品があればショッピングカートもクリアされると思います。私は1ステップのチェックアウト延長を使用していますが、私が見たところでは、トランザクションを処理しようとしたときに製品が在庫切れだったことを通知しませんでした。これはすべてのテストアカウントにあります。 –

+0

私があなたの場合は、カートに入れられた商品が売り切れになったことをお客様に通知する拡張機能に取り組みます。しかし、顧客に知らせることなく、障害のある製品を本当にカートから取り除くかどうかを最初にテストするべきです。 – SebiF

関連する問題