仅在单个脚本的持续时间内设置Magento配置选项吗?

我正在尝试通过编程和递归地在Magento中创建订单。我想启用 Flat Rate Shipping 方法并将成本设置为 5.00, , 例如。脚本运行后,我希望该值像往常一样从DB设置。

我正在使用基本功能来确定我们正在进行的迭代。如果是第一个,请设置运输方法。该脚本通过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>';
}
...

确实如此 不是 工作; Magento抛出例外 Please specify a shipping method 在报价上保存。

但是,我可以在DB中设置运输方法。这个 工作:

...
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 我认为这样做的方式无法正常工作。任何信息都会有所帮助,除了抨击我创建这样的订单:)谢谢。

有帮助吗?

解决方案

问题 setNode() 是它不会刷新配置缓存 Mage_Core_Model_Store. 。这不是Magento Cache,而是PHP数组,在存储初始化的运行时填充了商店特定配置,以及读取针对全局或网站特定配置的配置值时。

所以 setNode() 不适用于以前读过的特定值或值。

但是有一种方法可以设置节点以及缓存值:

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

其他提示

你是对的。 setNode() 使用完整的XPATH。您需要使用绝对路径设置存储数据:

stores/[code]/carriers/flatrate/active
许可以下: CC-BY-SA归因
scroll top