仅设置脚本持续时间的Magento配置数据
-
16-10-2019 - |
题
仅在单个脚本的持续时间内设置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