所以,我为一家公司工作,代码很多非常非常糟糕(我刚遇到的一个函数的圈复杂度是64,它基本上是900行的if语句)。我们在一次安装中运行大约30个Magento商店。据我所知,没有一个地方我可以对.xml文件进行更改并使其影响所有商店,因为page.xml存在于每个商店的主题中。
所以,我的问题 - 是否有任何方法可以防止.xml文件被覆盖,或者创建一个会影响所有商店的新的global.xml,还是什么?如果那些在我之前捣乱的人刚刚使用local.xml来覆盖他们需要影响的page.xml部分,那么我甚至不会问这个问题。
答案 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
文件夹。