Magento:延迟Head Block加载直到我的事件被解雇

时间:2013-07-12 07:42:03

标签: magento events block observers load-order

我有两位观察员:

<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 中以编程方式创建它,或者是否有其他方法可以防止它被加载,直到所有数据都可用?

甚至可以在这里以编程方式创建它还是已经最终确定了头部?

提前致谢

1 个答案:

答案 0 :(得分:0)

在调度catalog_block_product_list_collection事件时,head已经输出,所以没有任何东西可以实际改变它(或者实际上,它取决于列表块的放置位置,但是几乎所有情况都会在头脑之后。)

在呈现头部之前,您必须直接处理布局和列表块以从集合中检索数据,但是执行的方式取决于您是否要在所有列表块上应用代码,或者仅仅是类别1(知道也可以从CMS内容调用块,因此在相应的页面/块本身输出之前可能不存在)。