Magento Observer没有开火

时间:2013-08-26 15:01:10

标签: php magento

每当在admin cp中更新产品时,我都会尝试解雇观察者。记录更新。

的Config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Mod_Products>
            <version>1.0.0</version>
        </Mod_Products>
    </modules>

    <models>
        <Mod_Products>
            <class>Mod_Products_Model</class>
        </Mod_Products>
    </models>

    <events>
        <catalog_product_save_after>
            <observers>
                <Mod_Products_stock>
                    <type>singleton</type>
                    <class>Mod_Products_Model</class>
                    <method>logUpdate</method>
                </Mod_Products_stock>
            </observers>
        </catalog_product_save_after>
    </events>
</config>

Observer.php

class Mod_Products_Model_Observer {
    public function logUpdate($observer) {
        $event = $observer->getEvent()->getControllerAction()->getFullActionName();

        Mage::log('Event Fired: ' . $event);
        Mage::log(json_encode($observer->getEvent()));
    }
}

日志中没有错误也没有输出。

7 个答案:

答案 0 :(得分:2)

不知道为什么op接受了Jason的答案并没有真正解决它,但这是未来寻求者的正确答案(我注意到来自Emi&#39; s)评论他自己的答案):缺少adminhtml标签!

配置应如下所示(假设我没有错过任何其他内容):

<adminhtml>
    <events>
        <catalog_product_save_after>
            <observers>
                <Mod_Products_stock>
                    <type>singleton</type>
                    <class>Mod_Products_Model</class>
                    <method>logUpdate</method>
                </Mod_Products_stock>
            </observers>
        </catalog_product_save_after>
    </events>
</adminhtml>

希望这会有所帮助。

答案 1 :(得分:0)

配置中的类必须是Observer类,因此请更改为:

<class>Mod_Products_Model_Observer</class>

答案 2 :(得分:0)

让我们逐个浏览文件。

应用的/ etc /模块/ Mod_Products.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Mod_Products>
            <!-- Change to Community codePool if in app/code/community -->
            <codePool>local</codePool> 
            <active>true</active>
        </Mod_Products>
    </modules>
</config>

应用/代码/本地/ MOD /产品的/ etc / config.xml中

<?xml version="1.0"?>
<config>
    <modules>
        <Mod_Products>
            <version>1.0.0</version>
        </Mod_Products>
    </modules>

    <!-- Marking models as global sometimes helps -->
    <global>
        <models>
            <Mod_Products>
                <class>Mod_Products_Model</class>
            </Mod_Products>
        </models>
    </global>

    <events>
        <catalog_product_save_after>
            <observers>
                <mod_products_model_observer>
                    <type>singleton</type>
                    <class>Mod_Products_Model_Observer</class>
                    <method>logUpdate</method>
                </mod_products_model_observer>
            </observers>
        </catalog_product_save_after>
    </events>
</config>

应用/代码/本地/ MOD /产品/型号/ Observer.php

class Mod_Products_Model_Observer {
    public function logUpdate($observer) {
        $event = $observer->getEvent()->getControllerAction()->getFullActionName();

        Mage::log('Event Fired: ' . $event);
        Mage::log(json_encode($observer->getEvent()));
    }
}

注意文件名和目录,以及我更新的config.xml中的不同xml句柄。如果这对您有用,请告诉我。

答案 3 :(得分:0)

遇到此问题的可能解决方案是您的Magento应用程序可能没有适当的权限来写入app/var文件夹。特别是如果您使用的是基于UNIX / Linux的操作系统。

要解决此问题,只需将终端定位到Magento应用程序的根目录即可。进入后,使用以下命令为var文件夹授予适当的权限:

sudo chmod 777 -R var/

一旦我这样做,我的应用程序就能够在文件夹结构下记录并创建其他文件夹。

答案 4 :(得分:0)

我在同样的情况下挣扎,最后发现 Mage_Log 无效。尝试使用像 die(&#34;我在这里&#34;); 而不是 Mage :: Log()这样的东西进行跟踪,看看它是否来你的班级与否。如果是,请尝试通过配置开发 Mage_Log :开发人员:日志设置(启用=是)。 另外,检查配置:高级是否启用了 Mage_Log

答案 5 :(得分:0)

一旦我遇到同样的问题,我只是通过刷新系统缓存解决了这个问题,所以你也可以尝试刷新缓存以刷新其配置。

答案 6 :(得分:-1)

检查您的模块是否存在于"disable module output"并启用了 System -> configuration -> advenced ->禁用模块输出 并检查您的系统日志文件