Legen Sie Magento -Konfigurationsdaten nur für die Skriptdauer fest
-
16-10-2019 - |
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.
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