获得属于可配置产品的简单产品AFTER可配置产品保存

时间:2011-07-05 12:46:13

标签: magento

在magento中,可以通过以下调用获得与可配置产品相​​关联的简单产品:

$childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null, $product);

我正在尝试在保存可配置产品后调用此函数,以便我可以获得它使用的简单产品的新列表。所以我从catalog_product_save_after事件触发的方法进行上述调用。但是,在调用$childProducts之后,在保存操作之前存储与$product关联的简单产品,而不是在它之后。

如何在保存操作后获得与$product关联的简单产品?

在此先感谢,任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:7)

Magento的OOP系统非常好,这种善意有时会给尚未深入其结构的人带来麻烦。

如果您密切关注“getUsedProducts()”类中的方法“Mage_Catalog_Model_Product_Type_Configurable”,您会看到提供了一些“if”逻辑及其使用情况属性(例如“_usedProducts”,“_configurableAttributes”)。这些阻碍了您获得实际结果,但故障不是Magento,而是由于缺少Magento文档而导致的错误。

让我告诉你这个方法的前几行: -

Varien_Profiler::start('CONFIGURABLE:'.__METHOD__);
if (!$this->getProduct($product)->hasData($this->_usedProducts)) {
    if (is_null($requiredAttributeIds) and is_null($this->getProduct($product)->getData($this->_configurableAttributes))) {
        // If used products load before attributes, we will load attributes.
        $this->getConfigurableAttributes($product);
        // After attributes loading products loaded too.
        Varien_Profiler::stop('CONFIGURABLE:'.__METHOD__);
        return $this->getProduct($product)->getData($this->_usedProducts);
    }
    ....

此方法有2个参数 - “$requiredAttributeIds”(可配置属性ID)& “$product”(可配置的产品对象)。

调用此方法时,您将为参数“null”传递“$requiredAttributeIds”,但是您提供了正确的可配置产品对象“$product”。

此类具有属性“_usedProducts”(用于维护子简单产品的数据),该属性是为每个可配置产品对象设置的。如果之前已设置此值,则Magento将向您返回已有的值。这是您在更新可配置产品之前获取子产品的主要原因。

因此,您可以做的是清除完整的缓存存储,同时刷新所有缓存进程。可能那时你的结果会起作用,因为内部Magento将所有这些用过的产品数据存储在缓存中。

希望它有所帮助。