gpt4 book ai didi

magento - magento 企业横幅 xml 节点是如何插入到布局 xml 中的?

转载 作者:行者123 更新时间:2023-12-01 02:25:40 25 4
gpt4 key购买 nike

背景

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

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

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

我所知道的

该功能在我的 vanilla Enterprise 网站上运行良好。

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

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

我已经查看了横幅模块和观察者/事件,但看不到与如何插入节点有任何相关性的任何内容。

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

我在 FPC 模块中找到了对横幅的引用,但 FPC 在此站点上未使用,并且在禁用 FPC 时不会命中这些方法。

我已经仔细检查过,模块输出在 Admin Advanced 中没有被禁用。

我正在使用带有企业/默认值的 DesignFallbacks 模块,但这也没有帮助。

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

我在 Google 和 Stack Overflow 上进行了搜索,但有关 Enterprise Banners 的信息非常有限,而且我能找到的仅涉及管理部分,而不是它们如何从代码级别运行。

这一切现在导致...

我想知道的

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

最佳答案

Mage_Core_Model_Layout_Update上课 app/code/core/Mage/Core/Model/Layout/Update.php包含负责加载包布局 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;
}
Mage::getResourceModel('core/layout')资源模型对应 core_layout_update table 。在 Magento Enterprise 中,此表是存储横幅相关布局更新的位置。
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>

此表并非专门用于横幅更新 — 只是 Enterprise_Banner 模块的开发人员选择使用 fetchDbLayoutUpdates 的功能。来实现他们的功能。

关于magento - magento 企业横幅 xml 节点是如何插入到布局 xml 中的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com