19

我想知道在magento中渲染到html之前是否每次加载页面时都会触发一次事件?

如果您想为不依赖于用户会话的半静态属性执行一些业务逻辑,这可能会很有用。

例如,我将使用它来将规范标签传递到 magento 的标头。

4

4 回答 4

40

对于大多数页面/内容生成请求,有几个与请求相关的事件。以下是一些有用的处理顺序的部分列表,我希望其他人可以与其他人一起评论这篇文章。其中许多不适合您的需要(我在下面用粗体标出了您应该开始考虑的地方)。还有一些与块实例化相关的事件,尽管可以出于您的目的观察它们,但它们对每个块都是通用的,并且确实不合适。

假设renderLayout()在您关心的所有操作中都使用了它,它会调度两个事件(一个通用事件和一个特定于路由的事件) :

    Mage::dispatchEvent('controller_action_layout_render_before');
    Mage::dispatchEvent('controller_action_layout_render_before_'.$this->getFullActionName());

在完成所有路由、调度、视图配置、块实例化和渲染之后,前端控制器在发送响应之前调度了一个最后的事件:. 此活动不适合您的需要,但它是开始此答案的活动的一个很好的书挡。 controller_front_send_response_beforecontroller_front_init_before

于 2013-03-25T14:20:46.600 回答
3

http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ 这会有所帮助。

app/code/core/Mage/Core/Controller/Varien/Action.php 这个事件

controller_action_layout_load_before

被解雇

app/code/core/Mage/Core/Block/Abstract.php事件

core_block_abstract_to_html_before

以上两个事件可能会有所帮助。

于 2013-03-25T14:08:22.790 回答
1

我想你正在寻找这个活动controller_action_layout_render_before_RouteName_ControllerName_ActionName

您还可以记录Mage在以下函数中从类中的任何页面加载时触发的所有事件

public static function dispatchEvent($name, array $data = array())
    {
        Mage::log($name);
        Varien_Profiler::start('DISPATCH EVENT:'.$name);
        $result = self::app()->dispatchEvent($name, $data);
        Varien_Profiler::stop('DISPATCH EVENT:'.$name);
        return $result;
    }
于 2013-03-25T14:09:50.003 回答
1

我们可以使用观察者来使用 controller_front_init_routers 事件。在该观察者方法中,您可以按如下方式获取请求对象。

$request = $observer->getEvent()->getData('front')->getRequest();

于 2014-11-05T10:48:36.567 回答