Magento配置xml-继承值

Magento配置xml-继承值,magento,Magento,使用配置xml中的stores节点-是否可以操作inherit值(即确定网站或store值范围的复选框) 例如,general下phone的配置路径是:general>Store Information>phone 因此,在xml中,我的目标是: <stores> <my_store_code> <general> <store_information>

使用配置xml中的stores节点-是否可以操作inherit值(即确定网站或store值范围的复选框)

例如,general下phone的配置路径是:general>Store Information>phone

因此,在xml中,我的目标是:

<stores>
        <my_store_code>
            <general>
                <store_information>
                    <phone>111 222 333</phone>
                </store_information>
            </general>
        </my_store_code>
    </stores>

111 222 333

但我怎样才能确保这个值在网站上使用呢。路径似乎是phone_inherit,尽管我无法通过xml直接确定该路径。复选框的状态取决于是否在core_config_数据表中设置了值

您可以在Mage\u Adminhtml\u Block\u System\u Config::initFields()中看到这一点: 第295行(Magento 1.7.0.0):

\u configData
是从核心配置数据表加载的路径/值数组。如果设置了路径(在数据库中),它将使用该值并将$inherit设置为false(未选中);否则,它将在范围配置中查找该值(
\u configRoot
),并将$inherit设置为true(选中)

范围配置基于您在管理中“当前配置范围”下设置的内容。因此,如果您选择了商店视图,它将在
stores/my\u store\u code
下查找
general/store\u information/phone
值。根据您的配置,这可能会返回存储值、网站值、默认值或什么都不返回;存储值覆盖网站值,网站值覆盖默认值

这意味着,在配置中,无法明确表示“从网站继承”。相反,当您更改“使用网站/默认值”复选框的值时,Magento通过添加/删除数据库中的值来模仿这一点。当您取消选中该框并输入自定义值时,Magento会在core_config_数据中添加一行。同样,如果您选择使用“网站/默认”值,Magento将删除该行并查看范围配置


例如,您可以选中“use website”,但如果在config.xml文件中指定了存储值,则Magento将使用该值。有点困惑,但这就是它的工作原理。因此,如果希望商店使用网站值,则需要删除该值的商店配置xml。

复选框的状态取决于是否在核心配置数据表中设置了值

您可以在Mage\u Adminhtml\u Block\u System\u Config::initFields()中看到这一点: 第295行(Magento 1.7.0.0):

\u configData
是从核心配置数据表加载的路径/值数组。如果设置了路径(在数据库中),它将使用该值并将$inherit设置为false(未选中);否则,它将在范围配置中查找该值(
\u configRoot
),并将$inherit设置为true(选中)

范围配置基于您在管理中“当前配置范围”下设置的内容。因此,如果您选择了商店视图,它将在
stores/my\u store\u code
下查找
general/store\u information/phone
值。根据您的配置,这可能会返回存储值、网站值、默认值或什么都不返回;存储值覆盖网站值,网站值覆盖默认值

这意味着,在配置中,无法明确表示“从网站继承”。相反,当您更改“使用网站/默认值”复选框的值时,Magento通过添加/删除数据库中的值来模仿这一点。当您取消选中该框并输入自定义值时,Magento会在core_config_数据中添加一行。同样,如果您选择使用“网站/默认”值,Magento将删除该行并查看范围配置

例如,您可以选中“use website”,但如果在config.xml文件中指定了存储值,则Magento将使用该值。有点困惑,但这就是它的工作原理。因此,如果希望商店使用网站值,则需要删除该值的商店配置xml

if (isset($this->_configData[$path])) {
    $data = $this->_configData[$path];
    $inherit = false;
} else {
    $data = $this->_configRoot->descend($path);
    $inherit = true;
}