7

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

例如,我想在不删除现有值的情况下覆盖 core_config_data 表中的“web/unsecure/base_skin_url”项。因此,如果代码中的任何地方都调用了这个确切的代码:

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

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

提前致谢!

查克

4

3 回答 3

10

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 将在一段时间内加载配置,但不会加载存储对象。如果是这种情况,您将无法从存储对象加载存储代码。

我在Pulse Storm Chaos 模块中做了类似的事情。如果您对工作代码感兴趣,请访问Github

于 2012-10-10T23:05:03.933 回答
7

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

于 2014-04-30T09:36:47.030 回答
1

如果你想覆盖一些特殊的配置数据,你可以把它放在 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>
于 2012-10-11T06:36:44.797 回答