gpt4 book ai didi

php - 如何获取 magento 后端配置 xml 数据?

转载 作者:可可西里 更新时间:2023-11-01 13:50:36 24 4
gpt4 key购买 nike

我的模块中有一个 system.xml,它以此开头:

<config>
<sections>
<dev>
<groups>
<my_module>
<label>...

我想从不同的模块获取这个标签的值。我该怎么做?我的第一个想法是 Mage::getConfig('sections/dev/groups/my_module/label') , 但这不起作用 - 似乎是 <sections>配置区域不可访问。我也不知道 magento 在哪里加载这个值,它必须在某个时候加载,否则将无法显示它。

完全清楚:我并不是要获取存储在 core_config_data 表中的配置数据值,这没有问题。我希望能够获得与其相关的其他属性 - 例如组标签或字段的排序顺序,为此我需要能够读取 <sections>配置区域。

最佳答案

system.xml 文件永远不会与全局配置合并。它们仅在 Magento 为

构建用户界面时加载
System -> Configuration 

后端管理应用程序部分。除此之外,应用程序对它们没有任何用处。

如果你想抓标签,你需要自己加载完整的system.xml配置。这样的事情应该有效。

//load and merge `system.xml` files
$config = Mage::getConfig()->loadModulesConfiguration('system.xml');

//grab entire <sections/> node
var_dump($config->getNode('sections')->asXml());

//grab label from a specific option group as a string
var_dump((string)$config->getNode('sections/dev/groups/restrict/label'));

正如在这个线程的另一个答案中提到的,还有一个 adminhtml/config 模型类,它将一些逻辑包装在 getSection 方法中,所以你可以做一些事情像这样。

Mage::getSingleton('adminhtml/config')->getSection('dev')->groups->my_module->label

如果你看一下getSection的源码

#File: app/code/core/Mage/Adminhtml/Model/Config.php
public function getSections($sectionCode=null, $websiteCode=null, $storeCode=null)
{
if (empty($this->_sections)) {
$this->_initSectionsAndTabs();
}

return $this->_sections;
}

并跟随调用堆栈到达 _initSectionsAndTabs

#File: app/code/core/Mage/Adminhtml/Model/Config.php
protected function _initSectionsAndTabs()
{
$config = Mage::getConfig()->loadModulesConfiguration('system.xml')
->applyExtends();

Mage::dispatchEvent('adminhtml_init_system_config', array('config' => $config));
$this->_sections = $config->getNode('sections');
$this->_tabs = $config->getNode('tabs');
}

您会看到这个包装器方法最终会调用 loadModulesConfiguration 方法本身。额外的 applyExtends 如果 old bit of meta-programming in the configuration you can read about here , 这是 a longer series on configuration loading 的一部分. (自链接,对于 StackOverflow 的回答来说太长了)。

我个人不会使用它从配置中获取值的原因是当您进行此调用时调度的事件

Mage::dispatchEvent('adminhtml_init_system_config', array('config' => $config));

此事件可能会触发系统中的代码,假设您正在后端管理控制台区域加载系统配置系统。如果您只是想阅读 XML 树。简单地自己加载它并阅读值似乎是可行的方法。当然,您的用例可能会有所不同。

关于php - 如何获取 magento 后端配置 xml 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15906809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com