问题描述
在我们的Magento商店中,我们正在使用扩展名条形码运输"来更新库存( http://www.magentocommerce.com/magento-connect/barcode-shipping.html )或扩展名增强的管理网格(+编辑器)"( http://www.magentocommerce.com/magento-connect/enhanced-admin-grids-editor. html ).
In our Magento Shop we're updating our Stock with the extension "Barcode Shipping"(http://www.magentocommerce.com/magento-connect/barcode-shipping.html) or the custom Productgrid from the extension "Enhanced Admin Grids (+ Editor)" (http://www.magentocommerce.com/magento-connect/enhanced-admin-grids-editor.html).
如果销售产品并且库存量达到0,则属性stock_stock_availability设置为缺货".如果库存已更新,我们总是必须手动将属性stock_stock_availability设置为有库存".
If a product is sold and the stock quantity reaches 0, the attribute inventory_stock_availability is set to "Out of Stock". If the stock is updated, we always have to set the attribute inventory_stock_availability manually to "In Stock".
当库存水平更新为大于0的值时,是否可以将库存量自动设置为库存中"?也许是自定义扩展程序正在监听触发的事件?
Is there a way to automatically set the stock availability to "In Stock" when the stock level updates to a value greater than 0? Maybe a custom extension listening to a triggered event?
推荐答案
我通过结合使用@DWils答案和cronjob找到了一种合适的方法.
I found a suitable approach by using a combination of @DWils answer and cronjob.
在我的扩展程序配置(应用程序/代码/本地/我/UpdateStockAvailability/etc/config.xml)中:
In my extension config (app/code/local/My/UpdateStockAvailability/etc/config.xml):
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<My_UpdateStockAvailability>
<version>1.0.0</version>
</My_UpdateStockAvailability>
</modules>
<global>
<models>
<my_updatestockavailability>
<class>My_UpdateStockAvailability_Model</class>
</my_updatestockavailability>
</models>
<events>
<catalog_product_save_after>
<observers>
<my_updatestockavailability>
<class>my_updatestockavailability/observer</class>
<method>updateStockAvailability</method>
<type>singleton</type>
</my_updatestockavailability>
</observers>
</catalog_product_save_after>
</events>
</global>
<crontab>
<jobs>
<updatestockavailabilitycronjob>
<schedule>
<cron_expr>*/15 7-19 * * *</cron_expr>
</schedule>
<run>
<model>my_updatestockavailability/observer::updateCronAction</model>
</run>
</updatestockavailabilitycronjob>
</jobs>
</crontab>
</config>
我的观察者(app/code/local/My/UpdateStockAvailability/Model/Observer.php):
My observer (app/code/local/My/UpdateStockAvailability/Model/Observer.php):
<?php
class My_UpdateStockAvailability_Model_observer {
public function updateStockAvailability(Varien_Event_Observer $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
}
}
public function updateCronAction() {
$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();
$bundleCollection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('*')
->addAttributeToSelect('type')
->addAttributeToFilter('type_id', 'bundle')
->joinField('is_in_stock', 'cataloginventory/stock_item', 'is_in_stock', 'product_id=entity_id', '{{table}}.stock_id=1', 'left')
->addAttributeToFilter('is_in_stock', array('eq' => 0));
foreach ($bundleCollection as $bundle) {
$selectionCollection = $bundle->getTypeInstance(true)->getSelectionsCollection($bundle->getTypeInstance(true)->getOptionsIds($bundle), $bundle);
$allInStock = true;
foreach ($selectionCollection as $option) {
$stockItem = $option->getStockItem();
if ($stockItem->getQty() <= 0 || $stockItem->getIsInStock() <= $outQty) {
$allInStock = false;
}
}
if ($allInStock) {
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($bundle);
$stockItem->setData('is_in_stock', 1);
$stockItem->save();
}
}
}
}
最后,模块xml(app/etc/modules/My_UpdateStockAvailability.xml):
Finally the module xml (app/etc/modules/My_UpdateStockAvailability.xml):
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<My_UpdateStockAvailability>
<active>true</active>
<codePool>local</codePool>
</My_UpdateStockAvailability>
</modules>
</config>
这篇关于Magento:数量更新时自动更改库存_库存_可用性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!