Как получить данные от config.xml модуля


В модуле A Мне нужно получить некоторые данные из файла config.xml модулей B и C. Существуют ли какие-либо методы или классы, предназначенные для этого?

Особенно мне нужно получить XML-структуру и значения узла <default>, чтобы я мог восстановить значения по умолчанию конфигурации системы модулей B и C. Ниже приведен пример из config.xml модуля списка желаний:

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

Насколько я знаю, Magento загружается config.xml файлы всех модулей, так что Мне было интересно, может быть, эти данные уже кэшированы и могут быть каким-то образом извлечены из кэша? Если нет, то как получить его программно?

Author: d3tr5845, 2014-03-25

2 answers

Вы можете получить определенный узел из конфигурации следующим образом.

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

Это должно привести к повторному значению

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

Проблема в том, что он не извлекает значение из определенного файла. он получает значение из объединенной конфигурации.

Если вам нужны значения из определенного файла, сделайте это.

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

В переменной $xml у вас будет загруженный xml-файл, и вы можете использовать xpath для поиска определенного узла.

 20
Author: Marius, 2014-03-25 11:06:55

Вы можете получить доступ к config.xml любого модуля через Mage::getConfig. Все XML-файлы объединены в одну строку, поэтому вы не можете указать точный модуль, но вы можете фильтровать по пути тегов.

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

Возможно, вам потребуется добавить зависимость в модуле A от модуля B и C, чтобы убедиться, что их config.xml загружается при выполнении вышеуказанного кода.

 6
Author: Sander Mangel, 2014-03-25 11:04:57