2012-06-26 16 views
5

Per migrare tutte le modifiche a tutti gli ambienti, utilizzo gli script di aggiornamento del database. Li utilizzo per creare istanze diverse (cliente, impostazioni fiscali ecc.) Ma di solito per migrare blocchi statici e impostazioni di configurazione.Magento: blocchi statici e migrazione delle impostazioni di configurazione

Per migrare blocchi statici:

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

Per migrare le impostazioni:

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

So che siamo in grado di modificare le impostazioni di Magento via 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> 

Ma per quanto riguarda come ho capito possiamo modificare le impostazioni in questo modo solo se i percorsi: generale/store_informat ione/nome e
generale/content_staging/block_frontend_stub non esiste in db o loro valori uguali NULL, se il valore non NULL non possiamo modificarlo tramite XML. L'ho provato sul mio ambiente locale e penso di aver ragione ma non riesco a trovare un codice su Magento che è responsabile per l'impostazione della configurazione tramite xml. Ho ragione?

Puoi mostrarmi la parte di codice che è responsabile? E quali sono le migliori pratiche di migrazione per Magento? Forse non so qualcosa :)

risposta

4

Hai ragione, valori specificati nei file di configurazione XML vengono sovrascritti dai valori della tabella core_config_data. Come B00MER sottolineato, il codice in questione è 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; 
} 

noti che loadDb() è chiamato dopo loadModules().
L'effettiva logica di fusione si trova nel modello di risorsa config Mage_Core_Model_Resource_Config::loadToXml().

Per ciascuna impostazione globale questo si chiama:

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

Per ogni impostazione di questa portata sito si chiama:

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

per ciascun ambito sito web L'impostazione di questo si chiama:

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

Questo io s leggermente semplificato, ma se hai bisogno di maggiori dettagli puoi guardare la fonte.

2

È possibile specificare le impostazioni da core_config_data via local.xml su ciascuna delle vostre istanze del server:

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

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

Se il curioso in cui Magento è l'impostazione del i dati dai file di configurazione XML guardano la classe: Mage_Core_Model_Config

Per quanto riguarda le migliori pratiche, molte informazioni sugli argomenti:

Problemi correlati