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

14

В модуле я должен получить некоторые данные из файла config.xml модулей B и C . Есть ли методы или классы, предназначенные для этого?

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

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

d3tr5845
источник

Ответы:

20

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

$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для поиска определенного узла.

Мариус
источник
Значение может быть получено из базы данных , если она определена в колонке pathв core_config_dataтоже. Но только в конфигурационных файлах XML (это значения по умолчанию)
Виктор Агилар
6

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

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

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

Сандер Мангель
источник