Como copiar o arquivo Code / Core system.xml em Code / local no magento

18

Eu queria alguma personalização no painel de administração, então eu fiz alterações no

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

Mas não quero alterar o código dentro da pasta principal. Por causa da minha alteração de versão.

Então, eu gosto de mover esse arquivo para a minha pasta local, mas não está funcionando

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

Alguém pode me orientar como substituir o arquivo system.xml?

obrigado

Srihari
fonte

Respostas:

28

Para os system.xmlarquivos, não funciona como nos arquivos de classe. Os system.xmlarquivos são coletados dos módulos ativos do Magento. Apenas copiar um na localpasta não significa que ele esteja em um módulo, porque o arquivo de declaração do módulo ainda diz que o módulo pertence ao conjunto de corecódigos.
Se você deseja adicionar novos campos a uma seção ou substituir alguns dos campos, precisa criar seu próprio módulo.
Aqui está um exemplo de como você pode adicionar um novo campo na seção Catalog->Frontende como substituir um na mesma seção.
Digamos que seu módulo seja chamado Easylife_Catalog.
Você precisará dos seguintes arquivos:
app/etc/modules/Easylife_Catalog.xml- o arquivo de declaração

<?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 - o arquivo de configuração

<?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- sistema-> arquivo de configuração
Digamos que você queira alterar o List Modecampo para estar disponível apenas em nível global (sem nível de exibição de site e loja). O caminho cenário é catalog/frontend/list_mode. Então, a system.xmlaparência será assim:

<?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>

Agora, digamos que você queira adicionar um novo campo chamado customna mesma seção de configuração. Agora o xml acima se torna

<?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>

Não sei se existe um método para remover algum campo da configuração usando esse método. Eu procurei, mas não encontrei nada.

Marius
fonte
Obrigado. Só tenho pouca nota, a tag <depends> não é necessária, porque os módulos locais sempre são carregados após os módulos principais.
Jiří Chmiel
2
@ JiříChmiel. Ehum ... não, eles não são. todos os arquivos de declaração do módulo ( app/etc/modules) são carregados, todas as <depends> tags são analisadas e uma hierarquia de módulos é estabelecida. então os módulos são carregados nessa ordem.
Marius
Obrigado pela ótima resposta. Para mim, o <depends> no aplicativo / etc / modules / Easylife_Catalog.xml é o que estava faltando. Sem isso, parecia favorecer o arquivo system.xml principal sobre as alterações no meu arquivo system.xml local para modificar as declarações.
PromInc 11/08/16