Các tệp system.xml
không bao giờ được hợp nhất với cấu hình chung. Chúng chỉ được tải khi Magento xây dựng giao diện người dùng cho các phần
System -> Configuration
của ứng dụng quản trị phụ trợ. Ngoài ra, ứng dụng không sử dụng cho chúng.
Nếu bạn muốn lấy nhãn, bạn sẽ cần tự nạp toàn bộ cấu hình system.xml
của mình. Một cái gì đó như thế này sẽ làm việc.
//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'));
Như đã đề cập trong một câu trả lời trong chủ đề này, cũng có một lớp adminhtml/config
mô hình mà kết thúc tốt đẹp một số logic này trong một phương pháp getSection
, vì vậy bạn có thể làm một cái gì đó như thế này.
Mage::getSingleton('adminhtml/config')->getSection('dev')->groups->my_module->label
Nếu bạn nhìn vào nguồn gốc của 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;
}
và làm theo các cuộc gọi stack thông qua để _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');
}
Bạn sẽ thấy phương pháp wrapper này cuối cùng gọi phương thức loadModulesConfiguration
bản thân . Số applyExtends
bổ sung nếu số old bit of meta-programming in the configuration you can read about here, là một phần của a longer series on configuration loading. (tự liên kết, quá dài cho một câu trả lời StackOverflow).
Lý do cá nhân tôi sẽ không sử dụng để lấy các giá trị ra khỏi cấu hình là sự kiện đó là cử khi bạn thực hiện cuộc gọi này
Mage::dispatchEvent('adminhtml_init_system_config', array('config' => $config));
Sự kiện này có thể kích hoạt mã trong hệ thống của bạn, cho rằng bạn đang tải hệ thống cấu hình hệ thống trong vùng bảng điều khiển dành cho quản trị viên phụ trợ. Nếu bạn chỉ cần muốn đọc cây XML. chỉ đơn giản là tải nó cho mình và đọc các giá trị có vẻ là con đường để đi. Trường hợp sử dụng của bạn, tất nhiên, có thể khác nhau.
Tìm thấy giải pháp khác ngay sau khi bạn đăng nội dung này ... sự khác biệt là gì? Tại sao nên sử dụng loadModulesConfiguration thay vì getSingleton ('adminhtml/config')? – Benubird
@Benubird Cập nhật câu trả lời với nhiều thông tin và ngữ cảnh hơn. Phiên bản ngắn: Kỹ thuật bạn tìm thấy sử dụng chính phương thức 'loadModulesConfiguration'. –