0

我有两个观察者:

<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 的Block加载到我的 Head 中,但需要用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中以编程方式创建它,或者是否有其他方法可以防止在所有数据可用之前加载它?

甚至可以在这里以编程方式创建它,还是此时头部已经完成?

提前致谢

4

1 回答 1

0

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

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

于 2013-07-15T11:30:07.920 回答