Ben*_*ird 5 php config magento
我的模块中有一个system.xml,它以这个开头:
<config>
<sections>
<dev>
<groups>
<my_module>
<label>...
Run Code Online (Sandbox Code Playgroud)
我想从不同的模块中获取此标签的值.我该怎么做?我的第一个想法是Mage::getConfig('sections/dev/groups/my_module/label')
,但是这不起作用 - 似乎<sections>
配置区域无法访问.我也无法弄清楚magento在哪里加载这个值,它必须在某个时候做,或者它无法显示它.
要完全清楚:我没有尝试获取存储在core_config_data表中的配置数据值,这没有问题.我希望能够获得与其相关的其他属性 - 例如组标签或字段的排序顺序,为此我需要能够读取<sections>
配置区域.
这些system.xml
文件永远不会与全局配置合并.它们只在Magento构建用户界面时加载
System -> Configuration
Run Code Online (Sandbox Code Playgroud)
后端管理应用程序的一部分.除此之外,该应用程序没有用它们.
如果要获取标签,则需要自己加载完整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'));
Run Code Online (Sandbox Code Playgroud)
正如在这个帖子的另一个答案中所提到的,还有一个adminhtml/config
模型类在一个getSection
方法中包含了一些逻辑,所以你可以做这样的事情.
Mage::getSingleton('adminhtml/config')->getSection('dev')->groups->my_module->label
Run Code Online (Sandbox Code Playgroud)
如果你看看的来源 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;
}
Run Code Online (Sandbox Code Playgroud)
并按照调用堆栈进行操作 _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');
}
Run Code Online (Sandbox Code Playgroud)
你会看到这个包装器方法最终会调用loadModulesConfiguration
方法本身.applyExtends
如果您可以在此处阅读配置中的旧元编程,那么这是附加配置加载的更长系列的一部分.(自我链接,对于StackOverflow答案来说太长了).
我个人不会使用它来从配置中获取值的原因是当您进行此调用时调度的事件
Mage::dispatchEvent('adminhtml_init_system_config', array('config' => $config));
Run Code Online (Sandbox Code Playgroud)
此事件可能会触发系统中的代码,假定您在后端管理控制台区域中加载系统配置系统.如果您只想阅读XML树.只需自己加载它并阅读值似乎是要走的路.当然,您的用例可能会有所不同.