2011-08-23 64 views
7

因此,我一直在尋找將庫存可用性更改回In數量字段大於0時的庫存。當您將數量設置爲0並保存產品時,系統已自動將庫存可用性更改爲缺貨。當您將數量設置爲大於0並保存產品時,我想要一種將其設置回庫存的方法。Magento:在「數量變更」中將「庫存情況」從「缺貨」自動更改爲「庫存」(反之亦然)

嗯,我想我找到了一個簡單的方法,這本身讓我感到緊張。所以我想發佈給你的專家,看看這是否安全,正確,可以做。

應用程序/設計/ adminhtml /默認/缺省的/模板/目錄/產品/標籤/ inventory.phtml

我已經改變了這一點:

<?php foreach ($this->getStockOption() as $option): ?> 
     <?php $_selected = ($option['value'] == $this->getFieldValue('is_in_stock')) ? 'selected="selected"' : '' ?> 
     <option value="<?php echo $option['value'] ?>" <?php echo $_selected ?>><?php echo $option['label'] ?></option> 
<?php endforeach; ?> 

要這樣:

<?php if(($this->getFieldValue('qty')*1) > 0): ?> 
     <option selected="selected" value="1">In Stock</option> 
<?php else: ?> 
    <option selected="selected" value="0">Out of Stock</option> 
<?php endif; ?> 

在這一點上我所有的工作都是一個活的網站,所以你可以理解我的擔憂......

請讓我知道這是否會產生預期的效果(它看起來很像,但似乎過於簡單化......)

+0

這隻適用於表面,並沒有完全做我想做的。仍然在尋找答案... – Geoff

回答

0

庫存可用性文本可以在產品設置的「庫存」選項卡中處理,庫存數量字段。由於您必須手動輸入庫存數量,因此我建議您在爲產品輸入新數量時將庫存可用性設置更改回「有庫存」。

+0

這不是真的tomakun,我已經使用magento EE 1.9進行了測試。此外,您必須認真思考,我的案例中的庫存由程序更新,因爲我擁有數千種產品。我仍在尋找一些東西,當數量大於數量的時候將庫存可用性更新回庫存庫存。也許我將不得不在我的程序中做些事情。 – 2012-03-01 17:42:10

6

我相信你可以使用Magento事件catalog_product_save_after。 創建一個在事件catalog_product_save_after上執行以下操作的觀察者方法。

public function catalog_product_save_after($observer) { 
    $product = $observer->getProduct(); 
    $stockData = $product->getStockData(); 

    if ($product && $stockData['qty']) { 
     $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getEntityId()); // Load the stock for this product 
     $stock->setData('is_in_stock', 1); // Set the Product to InStock        
     $stock->save(); // Save 
    } 
} 
+0

woohoo感謝這! – givemesnacks

+0

當系統更新庫存時,這似乎不起作用,例如,如果創建貸項憑證並將項目返回到庫存。我想在這種情況下,系統不會保存產品本身,只有庫存項目,因此上面提出的觀察者不會被解僱。 –

1

只需創建與代碼片斷cron作業:

public function setBackInStock() 
{ 
    $collection = Mage::getResourceModel('cataloginventory/stock_item_collection'); 
    $outQty = Mage::getStoreConfig('cataloginventory/item/options_min_qty'); 
    $collection->addFieldToFilter('qty', array('gt' => $outQty)); 
    $collection->addFieldToFilter('is_in_stock', 0); 

    foreach($collection as $item) { 
     $item->setData('is_in_stock', 1); 
    } 
    $collection->save(); 
} 

小記,你可以爲每分鐘設置cron作業,因爲如果沒有結果的工作不會耗時/資源

0

這是我必須做的

 var stock_data = new catalogInventoryStockItemUpdateEntity() 
     { 
      qty = quantity, 
      is_in_stock = inStock, 
      manage_stock = stockManaged, 
      is_in_stockSpecified = true, 
     }; 

is_in_stockSpecified是很重要的

我使用SOAP API來更新庫存狀態。

enter image description here

相關問題