MAgento自定义事件观察者以更新库存

MAgento自定义事件观察者以更新库存,magento,magento-1.9,Magento,Magento 1.9,我试图在自定义模块中实现一个简单的观察者,以便在加载产品库存时更新产品库存 这是xml文件的内容: <?xml version="1.0"?> <config> <modules> <Foo_Bar> <version>0.1</version> </Foo_Bar> </modules> <global&g

我试图在自定义模块中实现一个简单的观察者,以便在加载产品库存时更新产品库存

这是xml文件的内容:

<?xml version="1.0"?>
<config>
    <modules>
        <Foo_Bar>
                <version>0.1</version>
        </Foo_Bar>
    </modules>
    <global>
        <models>
            <updatestock>
                    <class>Foo_Bar_Model</class>
            </updatestock>
        </models>
        <events>
            <catalog_product_load_before>
                <observers>
                    <Foo_Bar>
                        <type>model</type>
                        <class>updatestock/observer</class>
                        <method>updatestock</method>
                    </Foo_Bar>
                </observers>
            </catalog_product_load_before>
        </events>
    </global>
</config>
问题是库存没有保存;解决这个问题的办法是什么

谢谢你的帮助

编辑:

我认为问题来自:

<catalog_product_load_before>
产品尚未加载,我得到一个404未找到页面,但当我将其替换为:

<catalog_product_load_after>
产品库存已正确更新,但当产品库存可用性缺货且库存为0时;前端的可用性总是缺货,并且“添加到购物车”按钮被隐藏,这意味着加载的库存为0

我尝试过,但在这种情况下,我无法获取产品Id或SKU


感谢您的帮助

在观察者之前和中使用事件目录\u产品\u加载\u使用以下代码:

$productId = $observer->getValue();
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
$stockItem->setData('qty',555);
$stockItem->save();

在观察者之前和中使用事件目录\产品\加载\使用以下代码:

$productId = $observer->getValue();
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
$stockItem->setData('qty',555);
$stockItem->save();

您可以使用以下方式加载产品:

$productId = $observer->getProduct()->getId();
$stockItem =Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
$stockItem->setData('qty', (integer)$stockAmount);
$stockItem->save();

就是这样:

您可以使用以下方式加载产品:

$productId = $observer->getProduct()->getId();
$stockItem =Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
$stockItem->setData('qty', (integer)$stockAmount);
$stockItem->save();

就是这样:

产品库存通过CatalogInventory模块处理

试试这个:

class Foo_Bar_Model_Observer  {

    public function updatestock($observer) {
        $product = $observer->getProduct();
        $stock = $product->getStockItem();

        $stock->setQty(555);      
        $stock->save();

        $product->save();
    } 
}

此外,您不需要在观察者上扩展Mage_Core_Model_抽象。只是尝试在系统中保存一点内存

产品库存通过CatalogInventory模块处理

试试这个:

class Foo_Bar_Model_Observer  {

    public function updatestock($observer) {
        $product = $observer->getProduct();
        $stock = $product->getStockItem();

        $stock->setQty(555);      
        $stock->save();

        $product->save();
    } 
}
此外,您不需要在观察者上扩展Mage_Core_Model_抽象。只是尝试在系统中保存一点内存

试试看

$product = productId = $observer->getProduct();
$stockItem = Mage::getModel('cataloginventory/stock_item');
$stockItem->assignProduct($product);
$stockItem->setData('is_in_stock', 1);
$stockItem->setData('qty', 5555);

$product->setStockItem($stockItem);
$product->save();
请参见试一试

$product = productId = $observer->getProduct();
$stockItem = Mage::getModel('cataloginventory/stock_item');
$stockItem->assignProduct($product);
$stockItem->setData('is_in_stock', 1);
$stockItem->setData('qty', 5555);

$product->setStockItem($stockItem);
$product->save();
如果您想在从后端保存产品后使用$productobj,以便可以在事件发生后轻松使用目录产品保存,请参见

我假设您已经知道如何在M2中创建模块

现在你必须为M2开发新的模块

然后在下面的路径中创建这个events.xml文件

app\code\YOUR\u NAMESPACE\YOURMODULE\etc\adminhtml

如果您想在从后端保存产品后使用$productobj,那么您可以在事件发生后轻松地使用catalog\u product\u save\u

我假设您已经知道如何在M2中创建模块

现在你必须为M2开发新的模块

然后在下面的路径中创建这个events.xml文件

app\code\YOUR\u NAMESPACE\YOURMODULE\etc\adminhtml


事实上,我认为你甚至可以传递整个$product而不是$productId,如果两者都有效的话。@Bizboss我根据你的编辑编辑了我的答案。此代码现在应该可以在您的observer中正常工作。它会在产品加载之前更改库存数量,因此之后产品应该会显示想要的行为;儿子什么都不给。@Bizboss哪个Magento版本?我在社区1.7中测试了它,getValue应该可以工作,在Mage_Core_Model_Abstract中b/c在定义事件之前…\u load_,load中调用的$id作为Values传递给观测者实际上,我想你甚至可以传递整个$product而不是$productId,两者都应该可以工作。@Bizboss我编辑了我的答案以响应你的编辑。此代码现在应该可以在您的observer中正常工作。它会在产品加载之前更改库存数量,因此之后产品应该会显示想要的行为;儿子什么都不给。@Bizboss哪个Magento版本?我在community 1.7中测试了它,getValue应该可以工作,在Mage_Core_Model_Abstract中的b/c在定义事件之前…_load_,load中调用的$id作为值传递给观测者代码中有一些错误。在php中转换为整数就是int。productId应该是$productId吗?最后第二行缺少一个右括号。我downvoted@MartyWallace您可以在PHP中使用integer进行类型转换,这一行上也不会缺少括号。唯一有效的参数是缺少的$。与其投否决票,为什么不直接指出或编辑呢?因为代码中有一些错误,这就是为什么投否决票。我尝试了代码,但失败了。您是否使用了正确的观察者事件?代码中有一些错误。在php中转换为整数就是int。productId应该是$productId吗?最后第二行缺少一个右括号。我downvoted@MartyWallace您可以在PHP中使用integer进行类型转换,这一行上也不会缺少括号。唯一有效的参数是缺少的$。与其投否决票,为什么不直接指出或编辑呢?因为代码中有一些错误,这就是为什么投否决票。我尝试了代码,但失败了。您是否使用了正确的观察者事件?