在现有Magento观察者之前激活自定义观察者

时间:2011-07-26 20:42:59

标签: magento

有没有办法让你自定义的观察者比在同一事件上发射的Magento具有更高的优先级。我的问题是我正在修改欢迎块的输出,但是企业的PageCache在同一个corecore_block_abstract_to_html_after事件上触发。

我尝试将它放在我的配置中,但它不像cron jobs那样工作。

<core_block_abstract_to_html_after>
                <observers>
                    <modify_welcome>
                        <type>singleton</type>
                        <class>groupname_page/observer</class>
                        <method>changeWelcomeText</method>
                    </modify_welcome>
                    <enterprise_pagecache>
                        <class>enterprise_pagecache/observer</class>
                        <method>renderBlockPlaceholder</method>
                    </enterprise_pagecache>
                </observers>
 </core_block_abstract_to_html_after>

3 个答案:

答案 0 :(得分:6)

/app/etc/modules/Groupname_Page.xml

<config>
    <modules>
        <Groupname_Page>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <!-- Your dependencies go here -->
            </depends>
        </Groupname_Page>
        <Enterprise_PageCache>
            <depends>
                <Groupname_Page />
            </depends>
        </Enterprise_PageCache>
    </modules>
</config>

答案 1 :(得分:0)

无法控制观察者的秩序。 如果您查看Mage_Core_Model_App::dispatchEvent()方法,您将看到Magento如何从config.xml文件获取给定事件的所有观察者并逐个触发它们。

重写欢迎屏块可以帮助您。

答案 2 :(得分:0)

另一种选择是禁用企业缓存观察器,并在您自己的观察者中运行已禁用的观察者执行的方法

在你的模块的config.xml中:

        <core_block_abstract_to_html_after>
            <observers>
                <modify_welcome>
                    <type>singleton</type>
                    <class>groupname_page/observer</class>
                    <method>changeWelcomeText</method>
                </modify_welcome>
                <enterprise_pagecache>
                    <type>disabled</type>
                </enterprise_pagecache>
            </observers>
        </core_block_abstract_to_html_after>

在您的Observer.php

    public function changeWelcomeText(Varien_Event_Observer $observer)
    {
        //do the stuff you want your observer to do first
        //and after it's done, call the Enterprise observer's method
        Mage::getSingleton('enterprise_pagecache/observer')->renderBlockPlaceholder($observer);
    }

HTH