2013-04-09 13 views
5

मैं अपने मॉड्यूल है, जो इस के साथ शुरू होता में एक System.Xml है। मैं यह कैसे करुं? मेरा पहला विचार, Mage::getConfig('sections/dev/groups/my_module/label') था, लेकिन यह काम नहीं करता - ऐसा लगता है कि कॉन्फ़िगरेशन का <sections> क्षेत्र उपलब्ध नहीं है। मैं यह भी नहीं समझ सकता कि Magento इस मान को लोड कर रहा है, जो इसे किसी बिंदु पर करना चाहिए, या यह इसे प्रदर्शित करने में सक्षम नहीं होगा।मैं Magento बैकएंड कॉन्फ़िगरेशन XML डेटा कैसे प्राप्त करूं? मैं एक अलग मॉड्यूल से, इस लेबल का मूल्य प्राप्त करना चाहते हैं</p> <pre><code><config> <sections> <dev> <groups> <my_module> <label>... </code></pre> <p>:

पूरी तरह स्पष्ट होने के लिए: मैं config_config_data तालिका में संग्रहीत कॉन्फ़िगर डेटा मान प्राप्त करने का प्रयास नहीं कर रहा हूं, यह कोई परेशानी नहीं है। मैं उससे संबंधित अन्य विशेषताओं को प्राप्त करने में सक्षम होना चाहता हूं - जैसे कि समूह लेबल, या फ़ील्ड के सॉर्ट ऑर्डर, और ऐसा करने के लिए मुझे कॉन्फ़िगरेशन के <sections> क्षेत्र को पढ़ने में सक्षम होना चाहिए।

उत्तर

6

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 का हिस्सा है। (स्वयं लिंक, एक स्टैक ओवरफ्लो उत्तर के लिए बहुत लंबा)। जब आप इस कॉल

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

इस घटना को आपके सिस्टम में कोड गति प्रदान कर सकते मानता है कि आप कर रहे हैं

कारण मैं व्यक्तिगत रूप से इस का उपयोग नहीं होता विन्यास से बाहर मान हड़पने के लिए घटना है कि भेजा है बैकएंड व्यवस्थापक कंसोल क्षेत्र में सिस्टम कॉन्फ़िगरेशन सिस्टम लोड हो रहा है। यदि आप बस XML पेड़ को पढ़ना चाहते हैं। बस इसे स्वयं लोड करना और मानों को पढ़ने का तरीका लगता है। आपका उपयोग केस, ज़ाहिर है, अलग-अलग हो सकता है।

+0

इसे पोस्ट करने के ठीक बाद एक अलग समाधान मिला ... क्या अंतर है? Singleton ('adminhtml/config') प्राप्त करने के बजाय loadModules कॉन्फ़िगरेशन का उपयोग करना बेहतर क्यों है? – Benubird

+0

@ बेनबुर्ड ने अधिक जानकारी और संदर्भ के साथ उत्तर अपडेट किया। संक्षिप्त संस्करण: आपके द्वारा मिली तकनीक 'loadModules कॉन्फ़िगरेशन' विधि का उपयोग करती है। –

2

जैसा कि अक्सर ऐसा लगता है, मुझे प्रश्न पोस्ट करने के बाद उत्तर क्षण मिलते हैं ...

इस तरह वर्गों/dev/my_module/लेबल पाने के लिए है:

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

आप देख सकते हैं, तो आप Mage::getSingleton('adminhtml/config')->getSection('dev') उपयोग करने के लिए (आप भी ->getSections() उपयोग कर सकते हैं सभी वर्गों को पाने के लिए बैकएंड config प्राप्त करने की आवश्यकता फिर से शुरू करने के लिए)। यह एक Mage_Core_Model_Config_Element ऑब्जेक्ट देता है, जो वस्तुओं के पेड़ की जड़ है, दिखाया गया है। बस किसी भी चरण में print_r करें और आप शेष पेड़ देखेंगे, जो print_r प्रारूपों को सरणी की तरह करता है, हालांकि यह नहीं है।

संबंधित मुद्दे