如何在Magento中将Code / Core system.xml文件复制到Code / local


18

我想要在管理面板中进行一些自定义,所以我进行了更改

   1) "app/code/core/../system.xml file its working fine. 

但是我不想更改核心文件夹中的代码。由于我的版本更改。

所以我想将该文件移到我的本地文件夹中,但无法正常工作

 2) "app/code/local/../system.xml" files is not working

谁能指导我如何覆盖system.xml文件?

谢谢

Answers:


28

对于system.xml文件,它不像对类文件那样起作用。这些system.xml文件是从Magento的活动模块中收集的。仅将一个local文件复制到文件夹中并不意味着它在模块中,因为模块声明文件仍然表明该模块属于core代码池。
如果要向节中添加新字段或覆盖某些字段,则需要创建自己的模块。
这是一个示例,说明如何在此部分中添加新字段Catalog->Frontend以及如何在同一部分中覆盖一个新字段。
假设您的模块称为Easylife_Catalog
您将需要以下文件:
app/etc/modules/Easylife_Catalog.xml-声明文件

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Catalog>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog />
            </depends>
        </Easylife_Catalog>
    </modules>
</config>

app/code/local/Easylife/Catalog/etc/config.xml -配置文件

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Catalog>
            <version>0.0.1</version>
        </Easylife_Catalog>
    </modules>
</config>

app/etc/local/Easylife/Catalog/etc/system.xml-系统->配置文件
假设您要将List Mode字段更改为仅在全局级别可用(没有网站和商店视图级别)。设置路径为catalog/frontend/list_mode。然后system.xml将如下所示:

<?xml version="1.0"?>
<config>
    <sections>
        <catalog><!-- first part of the path -->
            <groups>
                <frontend><!-- second part of the path -->
                    <fields>
                        <list_mode><!-- third part of the path -->
                            <show_in_website>0</show_in_website><!-- this will override the core value -->
                            <show_in_store>0</show_in_store><!-- this will override the core value -->
                        </list_mode>
                    </fields>
                </frontend>
            </groups>
        </catalog>
    </sections>
</config>

现在,假设您要custom在同一配置节中添加一个新字段。现在,上面的xml变为

<?xml version="1.0"?>
<config>
    <sections>
        <catalog><!-- first part of the path -->
            <groups>
                <frontend><!-- second part of the path -->
                    <fields>
                        <list_mode><!-- third part of the path -->
                            <show_in_website>0</show_in_website><!-- this will override the core value -->
                            <show_in_store>0</show_in_store><!-- this will override the core value -->
                        </list_mode>
                        <custom translate="label"><!-- your new field -->
                            <label>Custom</label>
                            <frontend_type>text</frontend_type>
                            <sort_order>1000</sort_order>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
                        </custom>
                    </fields>
                </frontend>
            </groups>
        </catalog>
    </sections>
</config>

我不知道是否存在使用此方法从配置中删除某些字段的方法。我在寻找它,但没有找到任何东西。


谢谢。我只需要注意一点,标记<depends>是不必要的,因为本地模块总是在核心模块之后加载。
吉日Chmiel的

2
@JiříChmiel。嗯...不,他们不是。app/etc/modules加载所有模块声明文件(),然后<depends> 解析所有标签并建立模块层次结构。然后按该顺序加载模块。
马里乌斯

感谢您的出色回答。对我而言,app / etc / modules / Easylife_Catalog.xml中的<depends>是我所缺少的。没有它,它似乎更喜欢核心system.xml文件,而不是我的本地system.xml文件中用于修改声明的更改。
PromInc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.