php - Magento:静态 block 和配置设置迁移

标签 php magento deployment e-commerce

为了将所有更改迁移到所有环境,我使用了数据库升级脚本。我使用它们来创建不同的实例(客户、税务设置等),但通常用于迁移静态 block 和配置设置。

迁移静态 block :

<?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
general/content_staging/block_frontend_stub 不存在于 db 或者它们的值等于 NULL,如果值不为 NULL 我们不能通过 xml 修改它。我在本地环境中对其进行了测试,我认为我是对的,但在 Magento 上找不到负责通过 xml 设置配置的代码。 我说得对吗?

你能告诉我负责它的代码部分吗? 您对 Magento 的最佳迁移实践是什么?也许我不知道什么:)

最佳答案

你是对的,配置 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);

这稍微简化了,但如果您需要更多详细信息,可以查看源代码。

关于php - Magento:静态 block 和配置设置迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11201347/

相关文章:

php - 代码点火器上的权限被拒绝

javascript - 如何在 Magento 中将 CSS 文件添加到 CUSTOM WIDGET?

php - Chamilo 2.1 - 如何正确创建新主题?

javascript - 如何在 magento1 CMS 页面布局中调用或包含皮肤 JS 文件?

php - Magento 中的 Nextag ROI 代码

c# - 在安装时更改 app.config

Java、JPA、Glassfish、无效资源 : jdbc/__default__pm

sql-server - 将 SQL Server 数据库从测试部署到上线

php - 在 php.ini 中设置 date.timezone 不起作用

php - Twig 中的变量变量名