我正在寻找一个很好的解决方案来覆盖Magento配置而不更改默认值.
例如,我想覆盖core_config_data表中的"web/unsecure/base_skin_url"项而不删除现有值.因此,如果代码中的任何位置都会调用此确切代码:
Mage::getStoreConfig('web/unsecure/base_skin_url');
Run Code Online (Sandbox Code Playgroud)
它会找到我设置的配置选项,而不是默认的...
提前致谢!
查
Magento直接从配置对象的树结构中在运行时读取其配置值,因此您需要使用配置对象的本机setNode
方法来更改值.但是,由于Magento 在作用域配置中加载的方式(自我链接),它并不像看起来那么直截了当.
使用当前版本的Magento(我相信,但尚未测试,使用旧版本),您需要在当前节点集中设置配置值store
.
第一步是获取当前设置的商店的代码.您可以使用以下命令以编程方式执行此操作
$store = Mage::app()->getStore();
$code = $store->getCode();
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下调用设置配置值
$config = Mage::getConfig();
$config->setNode("stores/$code/web/unsecure/base_skin_url", 'value_to_set');
Run Code Online (Sandbox Code Playgroud)
请记住,在 Magento引导配置对象之后,所有这些都需要发生.另外请记住,Magento将有一段时间加载配置,但不会加载商店对象.如果是这种情况,您将无法从商店对象加载商店代码.
我在Pulse Storm Chaos模块中做了类似的事情.如果您对编写代码感兴趣,请访问Github.
Alan的回答是正确的,但它并不关心配置缓存.例如,如果您调用Mage::getStoreConfig('web/unsecure/base_skin_url')
两次并更改其间的值,则更改无效.要解决此问题,您应该使用$store->setConfig('web/unsecure/base_skin_url', 'value_to_set')
.它同时执行这两项操作:更新配置缓存并使用Alan的方法设置配置节点.