Cómo copiar el archivo Code / Core system.xml en Code / local en magento

18

quería un poco de personalización en el panel de administración, así que he realizado cambios en

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

Pero no quiero cambiar el código dentro de la carpeta principal. Debido a mi cambio de versión.

Entonces me gusta mover ese archivo a mi carpeta local pero no funciona

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

¿Alguien puede guiarme cómo anular el archivo system.xml?

Gracias

Srihari
fuente

Respuestas:

28

Para los system.xmlarchivos no funciona como lo hace para los archivos de clase. Los system.xmlarchivos se recopilan de los módulos activos de Magento. Simplemente copiar uno en la localcarpeta no significa que esté en un módulo, porque el archivo de declaración del módulo todavía dice que el módulo pertenece al conjunto de corecódigos.
Si desea agregar nuevos campos a una sección o anular algunos de los campos que necesita para crear su propio módulo.
Aquí hay un ejemplo de cómo puede agregar un nuevo campo en la sección Catalog->Frontendy cómo puede anular uno en la misma sección.
Digamos que su módulo se llama Easylife_Catalog.
Necesitará los siguientes archivos:
app/etc/modules/Easylife_Catalog.xml- el archivo de declaración

<?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 - el archivo de configuración

<?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-> archivo de configuración
Supongamos que desea cambiar el List Modecampo para que esté disponible solo a nivel global (sin nivel de vista de sitio web y tienda). La ruta de configuración es catalog/frontend/list_mode. Entonces system.xmlse verá así:

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

Ahora supongamos que desea agregar un nuevo campo llamado customen la misma sección de configuración. Ahora el xml anterior se convierte

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

No sé si hay un método para eliminar algún campo de la configuración usando este método. Lo busqué pero no encontré nada.

Marius
fuente
Gracias. Solo tengo una pequeña nota, la etiqueta <depends> no es necesaria, porque los módulos locales siempre se cargan después de los módulos principales.
Jiří Chmiel
2
@ JiříChmiel. Ehum ... no, no lo son. todos los archivos de declaración de módulo ( app/etc/modules) se cargan, luego <depends> se analizan todas las etiquetas y se establece una jerarquía de módulos. entonces los módulos se cargan en ese orden.
Marius
Gracias por la gran respuesta. Para mí, el <depends> en la aplicación / etc / modules / Easylife_Catalog.xml es lo que me faltaba. Sin eso, parecía favorecer el archivo central system.xml sobre los cambios en mi archivo system.xml local para modificar las declaraciones.
PromInc