Magento:在数量变化时自动将“库存可用性”从“缺货”改为“库存”(反之亦然)

时间:2011-08-23 22:28:15

标签: magento

因此,当数量字段大于0时,我一直在寻找一种方法将库存可用性更改回库存。当您将数量设置为0时,系统已自动将库存可用性更改为缺货保存产品。当您将数量设置为大于0并保存产品时,我想要一种方法将其设置回库存。

嗯,我想我发现了一种简单的方法,这本身就让我感到紧张。因此,我想向大家发帖,看看这是否安全,正确,可以做到。

app / design / adminhtml / default / default / template / catalog / product / tab / 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; ?>

此时我需要做的只是一个现场网站,所以你可以理解我的关注......

请告诉我这是否会产生预期效果(看起来如此但似乎过于简单......)

5 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分: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作业,因为如果没有结果,工作就会消耗时间/资源

答案 2 :(得分:0)

可以在产品设置的库存标签中处理库存可用性文本,与库存数量字段相同的选项卡。由于您无论如何都必须手动输入库存数量,我建议您只需将库存可用性设置更改回&#39;库存&#39;当您输入产品的新QTY时。

答案 3 :(得分: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

答案 4 :(得分:0)

另一个简单的解决方案是在DB上创建存储过程并使用事件

进行调用
############################################# START : Enable Stock Status
DELIMITER //
CREATE PROCEDURE EnableStock()
BEGIN

-- UPDATE
UPDATE cataloginventory_stock_status
SET stock_status=1
WHERE qty>0;  

-- UPDATE
UPDATE cataloginventory_stock_status
SET stock_status=0
WHERE qty<0;  

END; //
DELIMITER ;

############################################# END : Enable Stock Status

#Create event
CREATE EVENT CallEnableStock
    ON SCHEDULE EVERY 1 HOUR
    DO
      CALL EnableStock();