覆盖Magento配置



我正在寻找一个好的解决方案,在不更改默认值的情况下覆盖Magento配置。

例如,我想覆盖core_config_data表中的"web/unseure/base_skin_url"项,而不删除现有值。因此,如果在代码的任何地方,这个确切的代码被称为:

Mage::getStoreConfig('web/unsecure/base_skin_url');

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

提前感谢!

卡盘

Magento在运行时直接从配置对象的树结构中读取其配置值,因此您需要使用配置对象的原生setNode方法来更改值。然而,由于Magento在作用域配置(自链接)中加载的方式,它并不像看上去那么直接。

对于当前版本的Magento(我相信,但尚未测试旧版本),您需要在当前store的节点集中设置配置值。

第一步是获取当前设置的存储的代码。您可以使用以下以编程方式完成此操作

$store = Mage::app()->getStore();
$code  = $store->getCode();

然后,您可以使用以下调用来设置配置值

$config = Mage::getConfig();
$config->setNode("stores/$code/web/unsecure/base_skin_url", 'value_to_set');

请记住,这一切都需要在Magento引导配置对象后发生。还要记住,在一段时间内,Magento将加载配置,但不会加载存储对象。如果是这种情况,您将无法从存储对象加载存储代码。

我在我的脉冲风暴混沌模块中做了类似的事情。如果你对工作代码感兴趣,那就在Github上。

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

如果你想覆盖一些特殊的配置数据,你可以把它放在app/etc/local.xml中。但这只对你自己的商店有用,对公共模块不有用。

这是一种在不更改数据库的情况下为开发目的覆盖base_url的方法。

<config>
...
<stores>
<default>
<web>
<unsecure>
<base_url>http://dev.myshop.com/</base_url>
</unsecure>
<secure>
<base_url>http://dev.myshop.com/</base_url>
</secure>
</web>
</default>
<admin>
<web>
<unsecure>
<base_url>http://dev.myshop.com/</base_url>
</unsecure>
<secure>
<base_url>http://dev.myshop.com/</base_url>
</secure>
</web>
</admin>
</stores>
...
</config>

最新更新