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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top