Como obter dados do config.xml de um módulo

14

No módulo A I necessidade de obter alguns dados do arquivo config.xml de módulos B e C . Existem métodos ou classes dedicados para isso?

Especialmente, preciso obter a estrutura XML e os valores do nó <default>para poder restaurar os valores padrão da configuração do sistema dos módulos B e C. Abaixo está um exemplo do config.xml do módulo Wishlist:

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

Até onde eu sei, o Magento carrega arquivos config.xml de todos os módulos, então eu estava pensando que talvez esses dados já estejam armazenados em cache e possam ser recuperados do cache de alguma forma? Caso contrário, como recuperá-lo programaticamente?

d3tr5845
fonte

Respostas:

20

Você pode obter um certo nó da configuração como este.

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

isso deve recuperar o valor de

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

O problema é que ele não recupera o valor de um arquivo específico. obtém o valor da configuração mesclada.

Se você deseja valores de um arquivo específico, faça isso.

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

Você terá na $xmlvariável o arquivo xml carregado e poderá usá-lo xpathpara encontrar um nó específico.

Marius
fonte
O valor pode ser recuperado a partir do DB se for definido na coluna pathem core_config_datatambém. Mas apenas nos arquivos de configuração do XML (esses são os padrões) #
Victor Aguilar #
6

Você pode acessar o config.xmlde qualquer módulo por meio de Mage::getConfig. Todos os XMLs são mesclados em uma sequência, para que você não possa realmente especificar o módulo exato, mas pode filtrar no caminho das tags.

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

Pode ser necessário adicionar uma dependência no módulo A nos módulos B e C para garantir que eles config.xmlsejam carregados quando você estiver executando o código acima.

Sander Mangel
fonte