Jak uzyskać dane z config.xml modułu

14

W module Potrzebuję uzyskać pewne dane z pliku config.xml modułów B i C . Czy są do tego jakieś metody lub klasy?

Szczególnie potrzebuję uzyskać strukturę XML i wartości węzła, <default>aby móc przywrócić domyślne wartości konfiguracji systemu modułów B i C. Poniżej znajduje się przykład z config.xml modułu Lista życzeń:

<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>

O ile wiem Magento ładuje pliki config.xml wszystkich modułów, więc zastanawiałem się, może te dane są już buforowane i można je jakoś odzyskać z pamięci podręcznej? Jeśli nie, jak to programowo odzyskać?

d3tr5845
źródło

Odpowiedzi:

20

Możesz uzyskać określony węzeł z konfiguracji w ten sposób.

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

powinno to przywrócić wartość

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

Problem polega na tym, że nie pobiera wartości z określonego pliku. pobiera wartość ze scalonej konfiguracji.

Jeśli chcesz wartości z określonego pliku, zrób to.

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

Będziesz miał w $xmlzmiennej załadowany plik xml i możesz go użyć xpathdo znalezienia określonego węzła.

Marius
źródło
Wartość można pobrać z bazy danych, jeśli jest ona również zdefiniowana w kolumnie pathw core_config_data. Ale tylko w plikach konfiguracyjnych XML (są to wartości domyślne)
Victor Aguilar,
6

Możesz uzyskać dostęp do config.xmldowolnego modułu poprzez Mage::getConfig. Wszystkie pliki XML są scalone w jeden ciąg, więc nie można tak naprawdę określić dokładnego modułu, ale można filtrować według ścieżki znaczników.

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

Konieczne może być dodanie zależności w module A do modułów B i C, aby upewnić się, że config.xmlsą one ładowane podczas wykonywania powyższego kodu.

Sander Mangel
źródło