如何从模块的config.xml中获取数据


14

在模块A中,我需要从模块BC的config.xml文件中获取一些数据。是否有专门用于此的方法或类?

特别是,我需要获取节点的XML结构和值,<default>以便可以恢复模块B和C的系统配置的默认值。以下是Wishlist模块的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文件,所以我想知道此数据是否已经缓存,并且可以通过某种方式从缓存中检索?如果没有,如何以编程方式检索它?

Answers:


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用来查找特定节点。


如果在的列pathcore_config_data也定义了该值,则可以从数据库中检索该值。但仅在XML的配置文件中(这是默认设置)
Victor Aguilar

6

您可以通过访问config.xml任何模块的Mage::getConfig。所有XML都合并为一个字符串,因此您无法真正指定确切的模块,但可以按标签路径进行过滤。

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

您可能需要在模块BC的模块A中添加依赖项,以确保在执行上述代码时已加载它们。config.xml

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.