2012-06-26 12 views
5

Para migrar todos los cambios a todos los entornos, utilizo scripts de actualización de base de datos. Los uso para crear instancias diferentes (clientes, ajustes de impuestos, etc.) pero generalmente para migrar bloques estáticos y configuraciones de configuración.Magento: bloques estáticos y migración de configuraciones de configuración

Para migrar bloques estáticos:

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

para migrar la configuración:

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

Sé que podemos modificar la configuración a través de Magento 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> 

Pero en lo como entiendo, podemos modificar la configuración de esa manera solo si las rutas: general/store_informat ion/nombre y
general/content_staging/block_frontend_stub no existe en NULL igual db o sus valores, si el valor no NULL que no puede modificarlo a través de XML. Lo probé en mi entorno local y creo que estoy en lo cierto, pero no puedo encontrar un código en Magento, que es responsable de establecer la configuración a través de xml. ¿Estoy en lo cierto?

¿Puede mostrarme la parte del código que es responsable de ello? ¿Y cuáles son sus mejores prácticas de migración para Magento? Tal vez yo no sé algo :)

Respuesta

4

Tiene usted razón, los valores especificados en los archivos de configuración XML son sobrescritos por los valores de la tabla core_config_data. Como B00MER señaló, el código en cuestión está en 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; 
} 

en cuenta que loadDb() se llama después de loadModules().
La lógica de fusión real está en el modelo de recurso de configuración Mage_Core_Model_Resource_Config::loadToXml().

Para cada configuración global esto es llamado:

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

Para cada configuración de este alcance sitio web se llama:

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

Para cada ámbito página web se establece este se llama:

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

Este i Es un poco simplificado, pero si necesita más detalles, puede ver la fuente.

2

puede especificar los valores de core_config_data través local.xml en cada una de sus instancias de servidor:

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

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

Si su curiosidad, donde Magento está marcando el los datos de los archivos de configuración XML miran la clase: Mage_Core_Model_Config

En cuanto a las mejores prácticas, mucha información sobre los temas:

Cuestiones relacionadas