Cómo obtener datos de config.xml de un módulo

14

En el módulo A que necesito para obtener algunos datos de archivo config.xml de módulos B y C . ¿Hay algún método o clase dedicado para esto?

Especialmente necesito obtener la estructura XML y los valores de nodo <default>para poder restaurar los valores predeterminados de la configuración del sistema de los módulos B y C. A continuación se muestra un ejemplo de config.xml del módulo Lista de deseos:

<config>
    <default>
        <wishlist>
            <general>
                <active>1</active>
            </general>
            <email>
                <email_identity>general</email_identity>
                <email_template>wishlist_email_email_template</email_template>
            </email>
        </wishlist>
    </default>
</config>

Hasta donde sé, Magento carga archivos config.xml de todos los módulos, por lo que me preguntaba si tal vez estos datos ya están en caché y pueden recuperarse de la caché de alguna manera. Si no, ¿cómo recuperarlo programáticamente?

d3tr5845
fuente

Respuestas:

20

Puede obtener un determinado nodo de la configuración como este.

$value = Mage::getConfig()->getNode('default/wishlist/general/active');

esto debería recuperar el valor de

<default>
    <wishlist>
        <general>
            <active>1</active> <!-- this value -->
        </general>
    </wishlist>
</default>

El problema es que no recupera el valor de un archivo específico. obtiene el valor de la configuración fusionada.

Si desea valores de un archivo específico, haga esto.

$configFile = Mage::getConfig()->getModuleDir('etc', 'Mage_Wishlist').DS.'config.xml';
$string = file_get_contents($configFile);
$xml = simplexml_load_string($string, 'Varien_Simplexml_Element');

Tendrá en la $xmlvariable el archivo xml cargado y podrá usarlo xpathpara encontrar un nodo específico.

Marius
fuente
El valor puede ser recuperada de la base de datos si se define en la columna pathen core_config_data, también. Pero solo en los archivos de configuración del XML (estos son los valores predeterminados)
Victor Aguilar
6

Puede acceder a config.xmlcualquier módulo a través de Mage::getConfig. Todos los XML se fusionan en una sola cadena, por lo que realmente no puede especificar el módulo exacto, pero puede filtrar en la ruta de las etiquetas.

$default_xml = Mage::getConfig()
   ->loadModulesConfiguration('config.xml')
   ->getNode('default/wishlist')
   ->asXML(); 

Es posible que deba agregar una dependencia en el módulo A en el módulo B y C para asegurarse de que config.xmlesté cargada cuando ejecute el código anterior.

Sander Mangel
fuente