MAgento自定义事件观察者以更新库存
我试图在自定义模块中实现一个简单的观察者,以便在加载产品库存时更新产品库存 这是xml文件的内容: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 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进行类型转换,这一行上也不会缺少括号。唯一有效的参数是缺少的$。与其投否决票,为什么不直接指出或编辑呢?因为代码中有一些错误,这就是为什么投否决票。我尝试了代码,但失败了。您是否使用了正确的观察者事件?