So erhalten Sie Daten aus config.xml eines Moduls

14

Im Modul A muss ich einige Daten aus der Datei config.xml der Module B und C abrufen . Gibt es dafür spezielle Methoden oder Klassen?

Insbesondere muss ich die XML-Struktur und die Werte des Knotens <default>abrufen, damit ich die Standardwerte der Systemkonfiguration der Module B und C wiederherstellen kann. Das folgende Beispiel stammt aus der Datei config.xml des Wishlist-Moduls:

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

Soweit ich weiß, lädt Magento config.xml-Dateien aller Module, und ich habe mich gefragt, ob diese Daten möglicherweise bereits zwischengespeichert sind und irgendwie aus dem Cache abgerufen werden können. Wenn nicht, wie kann man es programmatisch abrufen?

d3tr5845
quelle

Antworten:

20

Sie können einen bestimmten Knoten wie folgt aus der Konfiguration abrufen.

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

Dies sollte den Wert von abrufen

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

Das Problem ist, dass der Wert nicht aus einer bestimmten Datei abgerufen wird. Er erhält den Wert aus der zusammengeführten Konfiguration.

Wenn Sie Werte aus einer bestimmten Datei wünschen, tun Sie dies.

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

In der $xmlVariablen befindet sich die geladene XML-Datei, mit der Sie xpatheinen bestimmten Knoten finden können.

Marius
quelle
Der Wert kann aus dem DB abgerufen werden, wenn er auch in der Spalte pathin definiert ist core_config_data. Aber nur in den Konfigurationsdateien des XML (dies sind die Standardeinstellungen)
Victor Aguilar
6

Sie können auf config.xmljedes Modul über zugreifen Mage::getConfig. Alle XMLs werden zu einer Zeichenfolge zusammengeführt, sodass Sie nicht wirklich das genaue Modul angeben können, sondern nach dem Pfad der Tags filtern können.

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

Möglicherweise müssen Sie in Modul A eine Abhängigkeit zu Modul B und C hinzufügen , um sicherzustellen, dass sie config.xmlgeladen sind, wenn Sie den obigen Code ausführen.

Sander Mangel
quelle