如何将magento enterprise banner xml节点插入到布局xml中?

如何将magento enterprise banner xml节点插入到布局xml中?,magento,enterprise,Magento,Enterprise,背景 我已经接管了Magento企业网站的开发,该网站有一个自定义主题。创建自定义主题时,使用的是基本默认模板,而不是企业默认模板,因此主题没有任何企业功能 我已经安装了一个vanilla Magento Enterprise安装,它与本站点上使用的版本号(1.11.1.0)相匹配,我正在慢慢地将两个站点区分开来,并一次将功能添加回一个模块中 然而,我遇到了横幅功能如何工作的障碍,因此我在调试自定义主题中缺少的内容以使其正确工作时遇到了问题 我所知道的 该功能在我的香草企业网站上运行良好 横幅模

背景

我已经接管了Magento企业网站的开发,该网站有一个自定义主题。创建自定义主题时,使用的是基本默认模板,而不是企业默认模板,因此主题没有任何企业功能

我已经安装了一个vanilla Magento Enterprise安装,它与本站点上使用的版本号(1.11.1.0)相匹配,我正在慢慢地将两个站点区分开来,并一次将功能添加回一个模块中

然而,我遇到了横幅功能如何工作的障碍,因此我在调试自定义主题中缺少的内容以使其正确工作时遇到了问题

我所知道的

该功能在我的香草企业网站上运行良好

横幅模块没有XML布局文件,这很有意义,因为它们是在管理部分中动态创建的,管理部分允许您选择要将横幅小部件插入的页面/块

使用commerce bug并查看已编译的页面布局XML,肯定会插入横幅XML节点,因此不会在其他模板或块中以编程方式(通过PHP)创建横幅XML节点

我查看了banner模块和Observators/events,但没有看到任何与节点插入方式相关的内容

它似乎与企业CMS模块相结合

我在FPC模块中找到了对横幅的引用,但是FPC在这个网站上没有使用,当FPC被禁用时,这些方法不会被点击

我已经仔细检查过了,并且在高级管理中没有禁用模块输出

我正在将DesignFallbacks模块与enterprise/default一起使用,这也没有帮助

我在自定义站点上设置了一些横幅,其方式与在香草企业站点上完全相同,但是编译后的XML没有插入横幅节点

我在Google和Stack Overflow上搜索过,但是关于企业横幅的信息非常有限,我能找到的只是关于管理部分的内容,而不是它们如何从代码级别起作用

所有这些现在导致

我想知道的


横幅XML节点进入布局XML的方式/位置。

位于
app/code/Core/Mage/Core/Model/layout/Update的
Mage\u Core\u Model\u layout\u Update
类包含负责加载包布局XML的代码。通常情况下,大部分操作都是通过
fetchFileLayoutUpdates
方法处理的

但是,在这个类中有一个不太为人所知的方法,名为
fetchDbLayoutUpdates
。此方法从数据库加载布局更新XML,并将其与包布局合并

public function fetchDbLayoutUpdates($handle)
{
    $_profilerKey = 'layout/db_update: '.$handle;
    Varien_Profiler::start($_profilerKey);
    $updateStr = Mage::getResourceModel('core/layout')->fetchUpdatesByHandle($handle);
    if (!$updateStr) {
        return false;
    }
    $updateStr = '<update_xml>' . $updateStr . '</update_xml>';
    $updateStr = str_replace($this->_subst['from'], $this->_subst['to'], $updateStr);
    $updateXml = simplexml_load_string($updateStr, $this->getElementClass());
    $this->fetchRecursiveUpdates($updateXml);
    $this->addUpdate($updateXml->innerXml());

    Varien_Profiler::stop($_profilerKey);
    return true;
}

此表并不是专门针对横幅更新的,只是Enterprise_横幅模块的开发人员选择使用
fetchDbLayoutUpdates
的功能来实现他们的功能

我认为这里的问题很好,但这是Magento特有的问题,您可能会在Magento堆栈交换上遇到类似的问题:
mysql> select * from core_layout_update\G
*************************** 1. row ***************************
layout_update_id: 1
          handle: cms_index_index
             xml: <reference name="top.container"><block type="enterprise_banner/widget_banner" name="b6d24980179958bad81911d80bce5f36" template="banner/widget/block.phtml"><action method="setData"><name>display_mode</name><value>fixed</value></action><action method="setData"><name>banner_ids</name><value>1</value></action><action method="setData"><name>unique_id</name><value>e2fb0962e605ed01d3759cf531402534</value></action></block></reference>
      sort_order: 0
*************************** 2. row ***************************
layout_update_id: 2
          handle: cms_index_index
             xml: <reference name="footer.before"><block type="enterprise_banner/widget_banner" name="2b2de5c74183936eb4514e860a09e265" template="banner/widget/block.phtml"><action method="setData"><name>display_mode</name><value>fixed</value></action><action method="setData"><name>banner_ids</name><value>2</value></action><action method="setData"><name>unique_id</name><value>1760872fb38c6042c8aee848bf86bf59</value></action></block></reference>