Question

Est-il possible de définir une option de configuration Magento pour la durée d'un seul script uniquement?

Je suis en train de créer et récursive programatically commandes dans Magento. Je souhaite activer la méthode Flat Rate Shipping et définir le coût de 5.00, par exemple. Une fois que le script a été exécuté, je veux que la valeur soit réglée par la persistance comme d'habitude de la db.

J'utilise une fonction de base pour déterminer quelle itération nous sommes sur. Si c'est le premier, définir la méthode d'expédition. Le script est appelé via 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>';
}
...

Cela ne pas travail; Magento lève l'exception Please specify a shipping method sur devis de sauvegarde.

Je peux cependant, définir la méthode d'expédition dans la db. Ce fait travail:

...
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>';
}
...

Je devine que la setNode Magento ne fonctionne pas la façon dont je pense qu'il fait. Toute information serait utile, sauf moi dénigrement pour la création de commandes comme ça :) Merci.

Était-ce utile?

La solution

Le problème avec setNode() est qu'il ne met pas à jour le cache de configuration dans Mage_Core_Model_Store. Ce n'est pas le cache Magento, mais un tableau PHP, rempli lors de l'exécution lors de l'initialisation du magasin pour la configuration spécifique du magasin et lorsque la valeur de configuration est lu pour la configuration spécifique globale ou site web.

setNode() ne fonctionne pas pour les valeurs spécifiques de magasin ou de valeurs qui ont été lus.

Mais il y a une méthode qui définit le nœud ainsi que la valeur mise en cache:

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

Autres conseils

Vous avez raison. setNode() utilise pleinement XPath. Vous devez définir stocker des données en utilisant le chemin absolu:

stores/[code]/carriers/flatrate/active
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top