Magento的事件在任何页面加载(Magento Event On Any Page Load)

2019-07-23 06:00发布

我想知道如果每个网页显示在Magento的HTML之前加载时间也被触发一次的事件?

如果你想要做一些业务逻辑不依赖于用户会话半静态属性,这可能是有用的。

例如我将使用这个到规范化标签递送至的magento的报头。

Answer 1:

有被派遣大多数页面级/内容生成的请求请求相关的事件。 下面是一些有用的加工订单的部分名单,我希望其他人可能对这个职位有一些评论他人。 其中有许多是不适合您的需要(我以粗体下面,你应该开始考虑)。 还有一些块实例相关的事件,虽然他们为你的目的进行观察,是通用对每块还真是不恰当的。

  • 第一个实用的单烧事件是controller_front_init_before 。 此事件被分派在前端控制器初始化响应所有调度的请求。 因为它被调用的动作控制器被分派出去之前,全球唯一的区域观察员将能够观察这一事件。

  • 假定该请求是从前端控制器通过路由器到动作控制器进行路由,有一些可先于渲染被观测到的事件preDispatch() -注意通用controller_action_predispatch事件句柄,可以为所有事件VS的两个动态消耗事件处理:

     Mage::dispatchEvent('controller_action_predispatch', array('controller_action' => $this)); Mage::dispatchEvent('controller_action_predispatch_' . $this->getRequest()->getRouteName(), array('controller_action' => $this)); Mage::dispatchEvent('controller_action_predispatch_' . $this->getFullActionName(), array('controller_action' => $this)); 
  • 如何响应所呈现可能会影响可用的事件; 主要的变化将来自于是否正在使用的布局更新,呈现响应(以及如何)。 例如, core_layout_update_updates_get_after可用于注入的布局更新文件的配置的模块布局更新文件的列表(一个罕见的,但潜在有用的情况下)。 控制器的动作紧密耦合的布局造型,所以有一些事件可能工作:

    • controller_action_layout_load_before
    • controller_action_layout_generate_xml_before
    • controller_action_layout_generate_blocks_beforecontroller_action_layout_generate_blocks_after - 其中后者将是第一个适用于您的需求

假设renderLayout()在约你关心的所有操作使用,有两个事件(一个通用的,一个路由专用) ,它分派 :

    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开始这个答案的事件。



Answer 2:

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

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



Answer 3:

我们可以通过观察使用controller_front_init_routers事件。 在这种观测方法,你可以得到请求对象如下。

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



Answer 4:

我认为你正在寻找此事件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;
    }


文章来源: Magento Event On Any Page Load
标签: magento