Frage

Ist es möglich, eine Magento -Konfigurationsoption für die Dauer eines einzelnen Skripts festzulegen?

Ich versuche programmatisch und rekursiv Aufträge in Magento zu erstellen. Ich möchte das aktivieren Flat Rate Shipping Methode und die Kosten auf festlegen 5.00, zum Beispiel. Sobald das Skript ausgeführt wurde, möchte ich, dass der Wert über Persistenz wie gewohnt aus der DB festgelegt wird.

Ich verwende eine grundlegende Funktion, um zu bestimmen, auf welcher Iteration wir sind. Wenn es das erste ist, setzen Sie die Versandmethode. Das Skript wird über Ajax aufgerufen.

...
try {
    if (isFirstIteration($_iteration)) {
        $_flatShipping = Mage::getStoreConfig('carriers/flatrate/active', $_storeId);
        if ($_flatShipping == 0) {
            Mage::getConfig()->setNode('carriers/flatrate/active', '1');
            Mage::getConfig()->setNode('carriers/flatrate/price', '5.00');
        }
    }
} catch(Exception $e) {
    $html .= '<div class="error">Error: ' . $e->getMessage() . '</div>';
}
...

Das tut nicht Arbeit; Magento wirft die Ausnahme aus Please specify a shipping method beim Angebot Speichern.

Ich kann jedoch die Versandmethode in der DB festlegen. Dies tut Arbeit:

...
try {
    if (isFirstIteration($_iteration)) {
        $_flatShipping = Mage::getStoreConfig('carriers/flatrate/active', $_storeId);
        if ($_flatShipping == 0) {
            $_mageConfig = new Mage_Core_Model_Config();
            $_mageConfig->saveConfig('carriers/flatrate/active', '1', 'default', 0);
            $_mageConfig->saveConfig('carriers/flatrate/price', '5.00', 'default', 0);
            Mage::getConfig()->reinit();
            Mage::app()->reinitStores();
        }
    }
} catch(Exception $e) {
    $html .= '<div class="error">Error: ' . $e->getMessage() . '</div>';
}
...

Ich vermute Magento's setNode Funktioniert nicht so, wie ich es denke. Alle Informationen wären hilfreich, außer dass ich mich für solche Bestellungen verprügelt hätte :) Danke.

War es hilfreich?

Lösung

Das Problem mit setNode() ist, dass es den Konfigurations -Cache in nicht aktualisiert wird Mage_Core_Model_Store. Dies ist nicht der Magento -Cache, sondern ein PHP -Array, das zur Laufzeit für die Store -Initialisierung für speicherische Konfiguration und wenn der Konfigurationswert für globale oder Website -spezifische Konfiguration gelesen wird.

So setNode() Funktioniert nicht für gespeicherte Werte oder Werte, die zuvor gelesen wurden.

Es gibt jedoch eine Methode, die den Knoten sowie den zwischengespeicherten Wert festlegt:

Mage::app()->getStore()
    ->setConfig('section/group/field', $value);

Andere Tipps

Du hast Recht. setNode() Verwendet volles XPath. Sie müssen Speicherdaten mit dem absoluten Pfad festlegen:

stores/[code]/carriers/flatrate/active
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top