Magento multistore .xml覆盖 - 以任何方式拥有受保护的全局.xml文件?

时间:2014-03-25 19:42:27

标签: xml magento

所以,我为一家公司工作,代码很多非常非常糟糕(我刚遇到的一个函数的圈复杂度是64,它基本上是900行的if语句)。我们在一次安装中运行大约30个Magento商店。据我所知,没有一个地方我可以对.xml文件进行更改并使其影响所有商店,因为page.xml存在于每个商店的主题中。

所以,我的问题 - 是否有任何方法可以防止.xml文件被覆盖,或者创建一个会影响所有商店的新的global.xml,还是什么?如果那些在我之前捣乱的人刚刚使用local.xml来覆盖他们需要影响的page.xml部分,那么我甚至不会问这个问题。

1 个答案:

答案 0 :(得分:1)

所以这是一个纯粹的设计覆盖,你需要在所有商店和主题上,但在相同的Magento安装?我想你可以添加一个像这样的小模块:

在文件夹MyModules/LayoutOverrides/etc内创建文件夹结构magento/app/code/local

在该文件夹magento/app/code/local/MyModules/LayoutOverrides/etc内创建文件config.xml

对于config.xml文件,请粘贴此内容并保存:

<?xml version="1.0"?>
<config>
    <modules>
        <MyModules_LayoutOverrides>
            <version>0.1.0</version>
        </MyModules_LayoutOverrides>
    </modules>
    <frontend>
        <layout>
            <updates>
                <layoutoverrides>
                    <file>mymodules_layoutoverrides.xml</file>
                </layoutoverrides>
            </updates>
        </layout>
    </frontend>
</config>

您还需要在文件夹MyModules_LayoutOverrides.xml中创建文件magento/app/etc/modules,内容为:

<?xml version="1.0"?>
<config>
    <modules>
        <MyModules_LayoutOverrides>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Page/>  <!-- dependency for override to come after Mage_Page -->
            </depends>
        </MyModules_LayoutOverrides>
    </modules>
</config>

然后在此处创建设计覆盖XML:app/design/frontend/base/layout/mymodules_layoutoverrides.xml

<?xml version="1.0"?>
<layout>
    <default>
        ...any override you would have for page.xml here
    </default>
</layout>

这一切都是未经测试的,但具有正确的依赖性,所以你知道模块在你需要覆盖的东西之后被加载,我看不出它为什么不能工作的原因。 作为一个模块,您将知道它运行 - 无论激活什么主题或商店。正如我所说,未经测试 - 但我很确定如果在活动主题文件夹中找不到它,它将默认返回到设计XML的base文件夹。