我有两位观察员:
<events>
<controller_action_layout_load_before>
<observers>
<QuBit_UniversalVariable_Model_Page_Observer>
<type>singleton</type>
<class>universal_variable_main/observer</class>
<method>setUniversalVariable</method>
</QuBit_UniversalVariable_Model_Page_Observer>
</observers>
</controller_action_layout_load_before>
<catalog_block_product_list_collection>
<observers>
<QuBit_UniversalVariable_Model_Page_Observer>
<type>singleton</type>
<class>universal_variable_main/observer</class>
<method>setCatalogProductListing</method>
</QuBit_UniversalVariable_Model_Page_Observer>
</observers>
</catalog_block_product_list_collection>
</events>
我想要一个包含javascript的阻止加载到我的头部,但需要使用 Observer 中收集的数据填充它。我的问题是在事件触发之前块加载。我添加了一些日志来证明这一点。
2013-07-12T07:18:44+00:00 DEBUG (7): loading setUniversalVariable
2013-07-12T07:18:44+00:00 DEBUG (7): loading template
2013-07-12T07:18:48+00:00 DEBUG (7): loading setCatalogProductListing
目前我正在使用布局XML添加块,我是否需要在 setCatalogProductListing 中以编程方式创建它,或者是否有其他方法可以防止它被加载,直到所有数据都可用?
甚至可以在这里以编程方式创建它还是已经最终确定了头部?
提前致谢
答案 0 :(得分:0)
在调度catalog_block_product_list_collection
事件时,head
已经输出,所以没有任何东西可以实际改变它(或者实际上,它取决于列表块的放置位置,但是几乎所有情况都会在头脑之后。)
在呈现头部之前,您必须直接处理布局和列表块以从集合中检索数据,但是执行的方式取决于您是否要在所有列表块上应用代码,或者仅仅是类别1(知道也可以从CMS内容调用块,因此在相应的页面/块本身输出之前可能不存在)。