2012-06-26 15 views
5

Um alle Änderungen in alle Umgebungen zu migrieren, verwende ich Datenbank-Upgrade-Skripte. Ich benutze sie, um verschiedene Instanzen (Kunden, Steuereinstellungen usw.) zu erstellen, aber normalerweise statische Blöcke und Konfigurationseinstellungen zu migrieren.Magento: Migration statischer Blöcke und Konfigurationseinstellungen

statischen Blöcke zu migrieren:

<?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(); 
?> 

Um Einstellungen zu migrieren:

<?php 
Mage::getModel('core/config')->saveConfig('design/theme/default', 'theme'); 
?> 

Ich weiß, dass wir Magento-Einstellungen über config.xml ändern können:

<default> 
    <general> 
     <store_information> 
      <name>My Store</name> 
     </store_information> 
     <content_staging> 
      <block_frontend_stub>home</block_frontend_stub> 
     </content_staging> 
    </general> 
</default> 

Aber so weit Soweit ich weiß, können wir Einstellungen nur dann auf diese Weise ändern, wenn die Pfade: general/store_informat Ion/name und
general/content_staging/block_frontend_stub existiert nicht bei db oder ihre Werte gleich NULL, es über xml, wenn der Wert nicht NULL wir nicht ändern können. Ich habe es in meiner lokalen Umgebung getestet und ich denke, dass ich recht habe, aber ich kann keinen Code bei Magento finden, der für die Konfiguration über XML zuständig ist. Bin ich richtig?

Können Sie mir den Teil des Codes zeigen, der dafür verantwortlich ist? Und was sind Ihre besten Migrationspraktiken für Magento? Vielleicht weiß ich nicht etwas :)

Antwort

4

Sie haben Recht, in den Config-XML-Dateien angegebenen Werte werden durch Werte aus der core_config_data Tabelle überschrieben. Wie B00MER wies darauf hin, ist der Code in Frage in 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; 
} 

Beachten Sie, dass loadDb() nach loadModules() genannt wird. Die tatsächliche Verbindungslogik befindet sich im Konfigurationsressourcenmodell Mage_Core_Model_Resource_Config::loadToXml().

dieser Für jede globale Einstellung heißt:

$xmlConfig->setNode('default/' . $r['path'], $value); 

Für jeden Bereich Website dieser Einstellung aufgerufen:

$nodePath = sprintf('websites/%s/%s', $websites[$r['scope_id']]['code'], $r['path']); 
$xmlConfig->setNode($nodePath, $value); 

Für jede Website Umfang Einstellung dieses genannt wird:

$nodePath = sprintf('stores/%s/%s', $stores[$r['scope_id']]['code'], $r['path']); 
$xmlConfig->setNode($nodePath, $value); 

Dies i s etwas vereinfacht, aber wenn Sie mehr Details benötigen, können Sie die Quelle betrachten.

2

Sie Einstellungen von core_config_data über local.xml auf jedem Ihrer Server-Instanzen festlegen können:

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

Quelle: https://twitter.com/IvanChepurnyi/status/111544548806758403

Wenn Ihr neugierig, wo Magento setzt die Daten aus den XML-Konfigurationsdateien betrachten die Klasse: Mage_Core_Model_Config

Soweit Best Practices, viele Informationen da draußen zu den Themen:

Verwandte Themen