2012-06-26 85 views
5

要將所有更改遷移到所有環境,我使用數據庫升級腳本。我使用它們來創建不同的實例(客戶,稅收設置等),但通常要遷移靜態塊和配置設置。Magento:靜態塊和配置設置遷移

要遷移的靜態塊:

<?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_informat離子/名稱
一般/ content_staging/block_frontend_stub 不要在數據庫或它們的值等於NULL存在,如果沒有價值NULL我們無法通過XML修改。我在我的本地環境中進行了測試,我認爲我是對的,但無法在Magento中找到代碼,它負責通過xml設置配置。 我對不對?

你能告訴我負責它的部分代碼嗎? Magento的最佳遷移實踐是什麼?也許我不知道的東西:)

回答

4

你是對的,值由從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); 

This i略有簡化,但如果您需要更多細節,可以查看源代碼。

2

您可以從core_config_data通過local.xml在每個服務器實例指定設置:如果你好奇https://twitter.com/IvanChepurnyi/status/111544548806758403

其中的Magento是設置:

<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> 

來源來自XML配置文件的數據查看該類:Mage_Core_Model_Config

就最佳實踐而言,關於主題的信息很多:

在配置XML文件中指定