我做了一个新的群众行动,根据算法刷新所选产品的某些属性。
我需要触发“catalog_product_save_before”,好像我是通过标准的管理产品创建/版本保存我的产品。
非常感谢你的帮助。
代码示例:
<catalog_product_save_before>
<observers>
<SaponeWebConcept_AttributeToCategories>
<type>singleton</type>
<class>attributetocategories/observer</class>
<method>beforeSave</method>
</SaponeWebConcept_AttributeToCategories>
</observers>
</catalog_product_save_before>
工作地点(标准产品创建/编辑)
$event = $observer->getEvent();
$product = $event->getProduct();
//And then I edit my product
它没有:我得到我的$productID
,加载它,然后保存,但上面的代码没有被触发。
$product = Mage::getModel('catalog/product')->load($productID);
//Some verifications
$product->save();
$productID
设置在foreach中,我获得了产品网格的所有选定产品ID。
答案 0 :(得分:2)
批量操作不会触发catalog_product_save_before事件。 使用catalog_product_attribute_update_before事件代替然后执行嵌套产品加载/保存
我刚刚在我的magento 1.6.2代码中完成了它并且工作正常。 循环通过产品ID { $ product = Mage :: getModel('catalog / product') - &gt; load($ productID); ......一些代码...... $产品 - &GT;保存(); }
确保在嵌套的$ product-&gt; save()调用之前设置对产品的所有重要更改,以便此事件处理程序具有正确状态的所有产品属性
答案 1 :(得分:0)
我没有在代码中查找,但我猜你的群众行动根本没有解雇。据我所知,群集动作保存跳转到与常规保存相同的保存模型方法。
答案 2 :(得分:0)
您需要在产品对象上调用setDataChanges()
方法,以指示某些内容已经/将要更改。
以下是我的代码中的一个简单示例:
Mage::getModel('catalog/product')->load($productId)->setDataChanges(true)->save();
这本身看起来有些奇怪,但我有一个观察者,它会对产品保存起到一些作用。
如果查看Mage_Core_Model_Abstract::save()
,您可以看到它检查产品是否需要保存:
if (!$this->_hasModelChanged()) {
return $this;
}
因此,如果您未对产品进行任何更改或未告知其存在数据更改,则会假定无需保存,并且不会触发catalog_product_save_before
。