我们如何在自定义模块中使用产品重复观察者事件?

时间:2013-03-15 06:29:07

标签: magento

这是我的config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Document   : config.xml
    Created on : July 26, 2012, 1:12 PM
    Author     : sanjeewani
    Description:
        Purpose of the document follows.
-->
<config>
    <modules>
        <Proporta_AmazonBarcode>
            <version>0.1.0</version>
        </Proporta_AmazonBarcode>
    </modules>
    <global>
        <events>
            <catalog_model_product_duplicate>
                <observers>
                    <proporta_amazonbarcode_observer>
                        <class>Proporta_AmazonBarcode_Model_Observer</class>
                        <method>duplicate1</method>
                    </proporta_amazonbarcode_observer>
                </observers>
            </catalog_model_product_duplicate>
        </events>
    </global>
</config>

这是我的Observer类函数。

public function duplicate1(Varien_Event_Observer $observer) {

      $product=$observer->getEvent()->getProduct();
/*
my logic is here
*/

    }

当我尝试从管理员复制产品时,它正好适用于duplicate1()函数。 我的问题是,$ product为null。我无法从活动中获得产品。有人有这样的问题吗?

2 个答案:

答案 0 :(得分:2)

这是因为product不是事件上下文的关键。如果您不确定上下文是什么,最好查看事件的发送位置[1]。在这种情况下,方法app/code/core/Mage/Catalog/Model/Product.php中的Mage_Catalog_Model_Product::duplicate()

    Mage::dispatchEvent(
        'catalog_model_product_duplicate',
        array('current_product' => $this, 'new_product' => $newProduct)
    );

所以,你可能想要做的是:

  $product = $observer->getEvent()->getCurrentProduct();

[1]或使用调试器,放置一个断点并检查$observer

答案 1 :(得分:-1)

你必须放置产品ID,没有ID,它不会工作。说到调试器,获取HTTP调试器,放置BP,观察响应以及可能看起来可疑的所有内容。