这些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
的附加信息,这是配置加载的更长系列的一部分。(自链接,对于 StackOverflow 的答案来说太长了)。
我个人不会使用它从配置中获取值的原因是当您进行此调用时调度的事件
Mage::dispatchEvent('adminhtml_init_system_config', array('config' => $config));
此事件可能会触发您系统中的代码,假设您正在后端管理控制台区域中加载系统配置系统。如果您只想阅读 XML 树。只需自己加载并读取值似乎是要走的路。当然,您的用例可能会有所不同。