2012-06-26 12 views
5

Do migracji wszystkich zmian do wszystkich środowisk używam skryptów aktualizacji bazy danych. Używam ich do tworzenia różnych instancji (klient, ustawienia podatkowe itp.), Ale zazwyczaj do migrowania bloków statycznych i ustawień konfiguracji.Magento: Migracja statycznych bloków i ustawień konfiguracyjnych

Aby przeprowadzić migrację bloków statycznych:

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

przenieść ustawienia:

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

wiem, że możemy zmodyfikować ustawienia Magento poprzez config.xml:

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

ale o ile jak rozumiem, możemy modyfikować ustawienia w taki sposób, tylko jeśli ścieżki: ogólne/store_informat ion/nazwa i
ogólny/content_staging/block_frontend_stub nie istnieje w db lub ich wartości równe NULL, jeśli nie wartość NULL nie możemy modyfikować za pomocą XML. Przetestowałem to na moim lokalnym środowisku i myślę, że mam rację, ale nie mogę znaleźć kodu w Magento, który jest odpowiedzialny za ustawienie konfiguracji przez xml. Mam rację?

Czy możesz pokazać mi część kodu, która jest za to odpowiedzialna? Jakie są twoje najlepsze praktyki migracyjne dla Magento? Może nie wiem coś :)

Odpowiedz

4

Masz rację, wartości podane w plikach config xml są zastępowane przez wartości z tabeli core_config_data. Jak B00MER wskazał, kod w pytaniu w 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; 
} 

Uwaga, loadDb() nazywa po loadModules().
Rzeczywista logika scalania znajduje się w modelu zasobów konfiguracji Mage_Core_Model_Resource_Config::loadToXml().

Dla każdego ustawienia globalnego To się nazywa:

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

Dla każdego zakresu stronie zachodzącego ten nazywa się:

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

Dla każdego zakresu stronie Ustawienie tego nazywa się:

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

To jest s nieco uproszczone, ale jeśli potrzebujesz więcej szczegółów, możesz spojrzeć na źródło.

2

można określić ustawienia z core_config_data poprzez local.xml na każdym z wystąpień serwera:

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

Źródło: https://twitter.com/IvanChepurnyi/status/111544548806758403

Jeśli ciekawi gdzie Magento jest ustawienie dane z plików konfiguracyjnych XML wyglądają na klasę: Mage_Core_Model_Config

Jeśli chodzi o najlepsze praktyki, wiele informacji na te tematy:

Powiązane problemy