我想知道是否每次加载页面时都会触发一次事件,然后再渲染为magento中的html?
如果要为不依赖于用户会话的半静态属性执行某些业务逻辑,这可能很有用.
例如,我将使用它将规范标签传递给magento的标题.
ben*_*rks 39
对于大多数页面/内容生成请求,有几个与请求相关的事件被分派.下面是一些有用的处理顺序的部分列表,我希望其他人可以与其他人一起评论这篇文章.其中许多不适合您的需要(我在下面以粗体字注明您应该开始考虑的地方).还有一些与块实例化相关的事件,尽管它们可以用于您的目的,但它们对于每个块都是通用的,并且实际上并不合适.
第一个实际的单发事件是controller_front_init_before.在Front Controller初始化中调度此事件以响应所有已分派的请求.因为在调用操作控制器之前调度它,所以只有全局区域观察者才能观察到此事件.
假设请求从Front Controller通过路由器路由到动作控制器,在渲染之前可以观察到preDispatch()一些事件 - 请注意controller_action_predispatch可以为所有事件消耗的通用事件句柄与两个动态事件句柄:
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));
Run Code Online (Sandbox Code Playgroud)如何呈现响应可能会影响可用的事件; 主要变化来自于是否使用布局更新来呈现响应(以及如何).例如,core_layout_update_updates_get_after可用于将布局更新文件注入已配置的模块布局更新文件列表(这是一种罕见但可能有用的案例).控制器动作与布局建模紧密结合,因此有一些事件可以工作:
假设renderLayout()在您关注的所有操作中使用它,它会调度两个事件(一个是通用的,一个是特定于路由的):
Mage::dispatchEvent('controller_action_layout_render_before');
Mage::dispatchEvent('controller_action_layout_render_before_'.$this->getFullActionName());
Run Code Online (Sandbox Code Playgroud)
在完成所有路由,调度,视图配置,块实例化和渲染之后,有一个最后沟渠事件,在发送响应之前由前端控制器调度:.这个活动并不适合你的需要,但这是开始这个答案的活动的一个很好的书挡. controller_front_send_response_beforecontroller_front_init_before
| 归档时间: |
|
| 查看次数: |
19921 次 |
| 最近记录: |