2012-05-02 99 views
0

我試圖使用CE 1.6.2構建Magento商店,並且我需要將產品狀態設置爲「Disabled」 qty ='0'(缺貨)。一旦產品售罄,我需要它自動將狀態更改爲禁用,因爲我永遠不會再銷售此產品。同樣,一旦達到某個數據/時間,我還需要它自動禁用該產品。當qty ='0'(缺貨)時,Magento將產品狀態設置爲'Disabled'

我知道Magento提供了一個選項,一旦它賣完了就不顯示產品,但那不是我要找的。我真的需要它來禁用該產品。

OR ....

如果不是禁用的產品,當產品缺貨,這是什麼有什麼辦法可以清除所有顧客購物這款產品的購物車。

我看到的問題是,如果客戶在其購物車中有此商品,而另一位顧客剛剛購買了最後一種商品,則第一位顧客仍會在其購物車中看到該商品,即使該商品不允許他們去結帳(因爲他們沒有更多的可用)。空車的唯一方法是,客戶必須手動刪除產品。

所以有一種方法,我可以設置,當項目是缺貨從所有的客戶購物車中刪除此產品?

我是Magento的新手,如果有人能告訴我代碼以及如何解決這個問題,我將非常感激!

回答

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會通知他們,該產品已經沒有庫存了。這必須足夠。

+0

感謝代碼工作。我今天想到了我的帖子的第二部分。基本上我每天都在做一筆交易(每天1或2件產品,24小時)。這就是我所有的網站。所以它不像一個擁有大量產品的真正的magento商店。如果購物車中有任何產品,我相信將產品設置爲「禁用」也會清除購物車。我使用的是一步式結賬擴展,從我看到的情況來看,當我嘗試處理交易時,它並未通知我產品缺貨。這些都是在 –

+0

的測試賬戶上。如果我是你,我會開展一項擴展工作,通知顧客,他購物車中的產品現在已經售罄並且已被移除。但是,如果在沒有告知客戶的情況下確實從您的購物車中刪除了禁用的產品,您還應該先測試。 – SebiF

相關問題