覆盖Magento配置

Chu*_*k D 6 php magento

我正在寻找一个很好的解决方案来覆盖Magento配置而不更改默认值.

例如,我想覆盖core_config_data表中的"web/unsecure/base_skin_url"项而不删除现有值.因此,如果代码中的任何位置都会调用此确切代码:

Mage::getStoreConfig('web/unsecure/base_skin_url');
Run Code Online (Sandbox Code Playgroud)

它会找到我设置的配置选项,而不是默认的...

提前致谢!

Ala*_*orm 9

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.


And*_*itz 7

Alan的回答是正确的,但它并不关心配置缓存.例如,如果您调用Mage::getStoreConfig('web/unsecure/base_skin_url')两次并更改其间的值,则更改无效.要解决此问题,您应该使用$store->setConfig('web/unsecure/base_skin_url', 'value_to_set').它同时执行这两项操作:更新配置缓存并使用Alan的方法设置配置节点.

  • 谢谢,它的确有效!如果有人对如何获得`$ store`变量感到好奇,请回答:`$ store = Mage :: app() - > getStore();` (2认同)