背景
我已经接管了一个具有自定义主题的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。
答案 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>
的功能来实现其功能。