Solo Set Magento dati di configurazione per lo script Durata
-
16-10-2019 - |
Domanda
E 'possibile impostare un'opzione di configurazione di Magento per la durata di un singolo script solo?
Sto cercando di creare programatically e ricorsivamente ordini Magento. Voglio abilitare il metodo Flat Rate Shipping
e impostare il costo per 5.00
, per esempio. Una volta che lo script è stato eseguito, voglio che il valore da impostare tramite la persistenza come al solito dal db.
Sto usando una funzione di base per determinare quale iterazione siamo su. Se è la prima, impostare il metodo di spedizione. Lo script si chiama tramite la tecnologia AJAX.
...
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>';
}
...
Che fa non di lavoro; Magento getta la Please specify a shipping method
eccezione sulla citazione di risparmio energetico.
posso, tuttavia, impostare il metodo di spedizione nel db. Questo ha di lavoro:
...
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>';
}
...
setNode
sto cercando di indovinare di Magento non funziona il mio modo di pensare lo fa. Qualsiasi info sarebbe utile, tranne me colpire per la creazione di ordini come questo :) Grazie.
Soluzione
Il problema con setNode()
è che non si aggiorna la cache config nella Mage_Core_Model_Store
. Questa non è la cache di Magento, ma un array PHP, popolati a runtime il negozio di inizializzazione per la configurazione negozio specifico e quando il valore di configurazione viene letto per la specifica configurazione globale o sito web.
Quindi setNode()
non funziona per i valori specifici dei negozi o valori che sono stati letti prima.
Ma c'è un metodo che imposta il nodo così come il valore memorizzato nella cache:
Mage::app()->getStore()
->setConfig('section/group/field', $value);
Altri suggerimenti
Hai ragione. setNode()
utilizza pieno XPath. Avrai bisogno di memorizzare i dati impostati utilizzando il percorso assoluto:
stores/[code]/carriers/flatrate/active