Magento:catalog_product_save_before与群众行动

时间:2013-06-12 21:20:15

标签: magento events magento-1.7 product

我做了一个新的群众行动,根据算法刷新所选产品的某些属性。

我需要触发“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。

3 个答案:

答案 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