Cara mendapatkan data dari config.xml modul

14

Dalam modul A saya perlu untuk mendapatkan beberapa data dari file config.xml modul B dan C . Apakah ada metode atau kelas yang didedikasikan untuk ini?

Terutama saya perlu mendapatkan struktur XML dan nilai-nilai simpul <default>sehingga saya dapat mengembalikan nilai-nilai standar konfigurasi sistem modul B dan C. Di bawah ini adalah contoh dari config.xml modul Wishlist:

<config>
    <default>
        <wishlist>
            <general>
                <active>1</active>
            </general>
            <email>
                <email_identity>general</email_identity>
                <email_template>wishlist_email_email_template</email_template>
            </email>
        </wishlist>
    </default>
</config>

Sejauh yang saya tahu Magento memuat file config.xml dari semua modul, jadi saya bertanya-tanya mungkin data ini sudah di-cache dan dapat diambil dari cache, entah bagaimana? Jika tidak, bagaimana cara mengambilnya dengan programatik?

d3tr5845
sumber

Jawaban:

20

Anda bisa mendapatkan simpul tertentu dari konfigurasi seperti ini.

$value = Mage::getConfig()->getNode('default/wishlist/general/active');

ini harus mengembalikan nilai dari

<default>
    <wishlist>
        <general>
            <active>1</active> <!-- this value -->
        </general>
    </wishlist>
</default>

Masalahnya adalah itu tidak mengambil nilai dari file tertentu. itu mendapatkan nilai dari konfigurasi gabungan.

Jika Anda ingin nilai dari file tertentu, lakukan ini.

$configFile = Mage::getConfig()->getModuleDir('etc', 'Mage_Wishlist').DS.'config.xml';
$string = file_get_contents($configFile);
$xml = simplexml_load_string($string, 'Varien_Simplexml_Element');

Anda akan memiliki dalam $xmlvariabel file xml yang dimuat dan Anda dapat menggunakan xpathuntuk menemukan node tertentu.

Marius
sumber
Nilai dapat diambil dari DB jika didefinisikan dalam kolom pathdi core_config_data, juga. Tetapi hanya dalam file konfigurasi XML (ini adalah default)
Victor Aguilar
6

Anda dapat mengakses config.xmlmodul apa saja melalui Mage::getConfig. Semua XML digabungkan menjadi satu string sehingga Anda tidak dapat benar-benar menentukan modul yang tepat tetapi Anda dapat memfilter pada jalur tag.

$default_xml = Mage::getConfig()
   ->loadModulesConfiguration('config.xml')
   ->getNode('default/wishlist')
   ->asXML(); 

Anda mungkin perlu menambahkan ketergantungan pada modul A pada modul B dan C untuk memastikan mereka config.xmldimuat ketika Anda menjalankan kode di atas.

Sander Mangel
sumber