任何页面加载的Magento事件

时间:2013-03-25 13:43:51

标签: magento

我想知道是否每次加载页面时都会触发一次事件,然后再渲染为magento中的html?

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

例如,我将使用它将规范标签传递给magento的标题。

4 个答案:

答案 0 :(得分:39)

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

假设renderLayout()用于您关心的所有操作,有两个事件(一个是通用的,一个是特定于路径的)which it dispatches

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

在完成所有路由,调度,视图配置,块实例化和渲染之后,有一个最后沟渠事件,在发送响应之前由前端控制器调度: controller_front_send_response_before。这个事件不适合你的需要,但它是开始这个​​答案的controller_front_init_before事件的一个很好的书挡。

答案 1 :(得分: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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

我认为您正在寻找此活动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;
    }