要将所有更改迁移到所有环境,我使用数据库升级脚本。我使用它们来创建不同的实例(客户,税收设置等),但通常是迁移静态块和配置设置。
迁移静态块:
<?php
$block = Mage::getModel('cms/block');
$data = array(
'title' => 'Block title',
'identifier' => 'block_identifier',
'content' => 'block content',
'is_active' => 1,
'stores' => array(0 => Mage_Core_Model_App::ADMIN_STORE_ID),
);
$block->addData($data);
$block->save();
?>
迁移设置:
<?php
Mage::getModel('core/config')->saveConfig('design/theme/default', 'theme');
?>
我知道我们可以通过config.xml修改Magento设置:
<default>
<general>
<store_information>
<name>My Store</name>
</store_information>
<content_staging>
<block_frontend_stub>home</block_frontend_stub>
</content_staging>
</general>
</default>
但据我了解,我们只有在路径: general / store_information / name 时才能以这种方式修改设置
和
常规/ content_staging / block_frontend_stub
db不存在或者它们的值等于NULL,如果value not NULL我们不能通过xml修改它。我在我的本地环境中测试了它,我认为我是对的但是在Magento找不到代码,它负责通过xml设置配置。
我是对的吗?
你能告诉我代码的一部分吗? 您对Magento的最佳迁移实践是什么?也许我不知道什么:)
答案 0 :(得分:4)
您说得对,config xml文件中指定的值会被core_config_data
表中的值覆盖。
正如B00MER指出的那样,有问题的代码在Mage_Core_Model_Config::init()
中:
public function init($options=array())
{
$this->setCacheChecksum(null);
$this->_cacheLoadedSections = array();
$this->setOptions($options);
$this->loadBase();
$cacheLoad = $this->loadModulesCache();
if ($cacheLoad) {
return $this;
}
$this->loadModules();
$this->loadDb();
$this->saveCache();
return $this;
}
请注意loadDb()
之后调用loadModules()
实际的合并逻辑位于配置资源模型Mage_Core_Model_Resource_Config::loadToXml()
中。
对于每个全局设置,这称为:
$xmlConfig->setNode('default/' . $r['path'], $value);
对于每个网站范围设置,这称为:
$nodePath = sprintf('websites/%s/%s', $websites[$r['scope_id']]['code'], $r['path']);
$xmlConfig->setNode($nodePath, $value);
对于每个网站范围设置,这称为:
$nodePath = sprintf('stores/%s/%s', $stores[$r['scope_id']]['code'], $r['path']);
$xmlConfig->setNode($nodePath, $value);
这有点简化,但如果您需要更多细节,可以查看来源。
答案 1 :(得分:2)
您可以在每个服务器实例上通过core_config_data
指定local.xml
的设置:
<config>
<stores>
<store_code>
<!-- config value for a store (web/unsecure/base_url) -->
<web>
<unsecure>
<base_url>http://example-magento-store.com</base_url>
</unsecure>
</web>
</store_code>
</stores>
<websites>
<website_code>
<!-- config value for a website (web/unsecure/base_url) -->
<web>
<unsecure>
<base_url>http://another-example-magento-store.com</base_url>
</unsecure>
</web>
</website_code>
</websites>
<default>
<!-- default config value (web/unsecure/base_url) -->
<web>
<unsecure>
<base_url>http://default-magento-store.com</base_url>
</unsecure>
</web>
</default>
</config>
来源:https://twitter.com/IvanChepurnyi/status/111544548806758403
如果您对Magento在XML配置文件中设置数据的好奇心如下:Mage_Core_Model_Config
就最佳做法而言,有很多关于主题的信息: