0

我正在为 Magento 做一个模块,我的模块具有与 Magento 的 Crosssell 本机功能相同的功能。我有这个产品网格,用户选择一些复选框来将此产品与主要产品相关联。一切都好。

但是,我创建了一个自定义属性来保存此产品的 ID,并为“catalog_product_save_after”事件创建一个观察者:

  <events>
        <catalog_product_save_after>
            <observers>
                <brindeproduto_save_product_data>
                    <type>singleton</type>
                    <class>brindeproduto/observer</class>
                    <method>saveProductTabData</method>
                </brindeproduto_save_product_data>
            </observers>
        </catalog_product_save_after>
    </events>

在我的 saveProductTabData 上,我按请求的 ID 加载主要产品,并将所选产品的 IDS 放在我的自定义属性上,例如“1,2,3,4,5,6”。

好的,但是当我做 $product->save(); 我的浏览器负载无限,没有任何错误或异常。观察者的代码很简单。

$product = Mage::getModel('catalog/product')->load($product_id);
//some logical Specific information that is not in question now.
$product->save();

而已。

我试过调试保存功能并得到一些有趣的结果。在 Mage_Core_Model_Abstract 函数 save() 上,我在部分代码上放了一些骰子,然后全部搞定。此代码是 Magento 1.5 社区上功能保存第 330 行的一部分。

    if ($dataCommited) {
        $this->_afterSaveCommit();
    }
    return $this;

这是函数的最后一行。我在返回之前把死。

    if ($dataCommited) {
        $this->_afterSaveCommit();
    }
    die('test');
    return $this;

我有骰子。但在返回之前仅此而已。有些人知道发生了什么?就这样耽误了5个小时。任何帮助将不胜感激。

4

1 回答 1

2

您不应该在观察者中进行任何保存 (*_save_after)。

这将导致一个永无止境的循环

于 2012-11-30T12:13:27.013 回答