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

时间:2013-05-21 01:43:00

标签: magento enterprise

背景

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

我已经设置了一个与该站点上使用的版本号匹配的香草Magento Enterprise安装程序(1.11.1.0),我正在慢慢地将这两个站点区分开来并一次在一个模块中添加功能。

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

我所知道的

该功能在我的vanilla企业站点上运行良好。

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

使用商业错误并查看已编译的页面布局XML,标题XML节点肯定会被插入,因此不会以编程方式(通过PHP)在其他模板或块中创建。

我通过横幅模块和观察者/事件看了一眼,但看不到任何与插入节点有关的内容。

它似乎与企业CMS模块结合在一起。

我在FPC模块中找到了对Banners的引用,但是在这个站点上没有使用FPC,并且当FPC被禁用时,这些方法没有被命中。

我已经进行了双重检查,并且在管理高级中未禁用模块输出。

我正在使用带有enterprise / default的DesignFallbacks模块,而且这两个模块都没有帮助。

我在自定义网站上设置的横幅与在vanilla企业网站中完全相同,但编译的XML没有插入横幅节点。

我搜索了Google和Stack Overflow,但有关企业横幅的信息非常有限,我只能找到有关管理部分的信息,而不是代码级别的功能。

这一切现在导致......

我想知道的事情

横幅XML节点如何/在何处进入布局XML。

1 个答案:

答案 0 :(得分:3)

Mage_Core_Model_Layout_Update的{​​{1}}类包含负责加载包布局XML的代码。通常,大部分内容都是在app/code/core/Mage/Core/Model/Layout/Update.php方法中处理的。

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

fetchDbLayoutUpdates

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; } 资源模型与Mage::getResourceModel('core/layout')表对应。在Magento Enterprise中,此表是存储与横幅相关的布局更新的位置。

core_layout_update

此表并非专门用于横幅更新 - 只是Enterprise_Banner模块的开发人员选择使用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> 的功能来实现其功能。