2012-06-26 26 views
5

Để di chuyển tất cả thay đổi đối với tất cả các môi trường, tôi sử dụng tập lệnh nâng cấp cơ sở dữ liệu. Tôi sử dụng chúng để tạo ra các trường hợp khác nhau (khách hàng, cài đặt thuế, vv) nhưng thường để di chuyển các khối tĩnh và các thiết lập cấu hình.Magento: Di chuyển khối tĩnh và cài đặt cấu hình

Để di chuyển các khối tĩnh:

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

Để di chuyển các thiết lập:

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

tôi biết rằng chúng tôi có thể sửa đổi cài đặt Magento qua 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> 

Nhưng như xa như tôi hiểu, chúng tôi có thể sửa đổi cài đặt theo cách như vậy chỉ khi đường dẫn: chung/store_informat ion/tên
chung/content_staging/block_frontend_stub không tồn tại NULL bằng db hay giá trị của họ, nếu giá trị không phải là NULL chúng ta không thể sửa đổi nó qua xml. Tôi đã thử nghiệm nó trên môi trường địa phương của tôi và tôi nghĩ rằng tôi đúng nhưng không thể tìm thấy một mã tại Magento có trách nhiệm thiết lập cấu hình thông qua xml. Tôi có đúng không?

Bạn có thể chỉ cho tôi phần mã chịu trách nhiệm cho nó không? Và thực hành di chuyển tốt nhất của bạn cho Magento là gì? Có lẽ tôi không biết điều gì đó :)

Trả lời

4

Bạn là đúng, giá trị được xác định trong tập tin cấu hình xml được ghi đè bởi các giá trị từ bảng core_config_data. Như B00MER chỉ ra, các mã trong câu hỏi là trong 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; 
} 

ý rằng loadDb() được gọi sau khi loadModules().
Logic hợp nhất thực tế nằm trong mô hình tài nguyên cấu hình Mage_Core_Model_Resource_Config::loadToXml().

Đối với mỗi thiết lập toàn cầu này được gọi là:

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

Đối với mỗi thiết lập này phạm vi trang web được gọi là:

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

Đối với mỗi phạm vi trang web thiết lập này được gọi là:

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

i này s hơi đơn giản, nhưng nếu bạn cần chi tiết hơn, bạn có thể nhìn vào nguồn.

2

Bạn có thể chỉ định thiết lập từ core_config_data qua local.xml trên mỗi trường hợp máy chủ của bạn:

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

Nguồn: https://twitter.com/IvanChepurnyi/status/111544548806758403

Nếu tò mò của bạn, nơi Magento được thiết lập dữ liệu từ tệp cấu hình XML xem xét lớp học: Mage_Core_Model_Config

Theo như thực tiễn tốt nhất, nhiều thông tin ngoài đó về các chủ đề:

Các vấn đề liên quan