2010-08-30 78 views
4

我正在編程創建網站/用戶等...Magento:設置剛剛創建的網站的配置值?

這是問題:創建網站時,我不能馬上設置配置值。

代碼:

<?php 
/* Website information */ 
$website_data = array(
      'name' => 'Company name', 
      'code' => 'website_company_1', 
      'sort_order' => '1', 
      ); 

/* Save website */ 
$website = Mage::getModel('core/website'); 
$website->setData($website_data); 
$website->save(); 

/* Get website code */ 
$web_code = $website->getCode(); 

/* R-int stores */ 
Mage::app()->reinitStores(); 

/* Config data array example */ 
$data = array('name' => 'Company 1', 'phone' => '056 22 33 61') 

/* Set config values in array */ 
$groups = array(); 
foreach($data as $key => $value){ 
$groups['store_information']['fields'][$key]['value'] = $value; 
} 


/* Save config values */ 
Mage::getModel('adminhtml/config_data') 
     ->setSection('general') 
     ->setWebsite($web_code) 
     ->setStore(NULL) 
     ->setGroups($groups) 
     ->save(); 


/* Re-init again */ 
Mage::app()->reinitStores(); 

然而,這並不能出於某種原因,但如果我先創建一個網站(代碼相同),然後執行此之後配置保存功能,它工作正常。就好像它需要首先加載一個新的頁面,然後才能設置/更新配置值。我認爲重新啓動會解決這個問題,但它不會...

想法?

+0

的更多細節將有助於人們調試此。具體來說,$ website_data和$ data中的內容以及它們從哪裏填充。 – 2010-08-30 20:38:49

+0

增加了一些示例代碼,因爲實際的代碼是很重要的。這兩個都只是關聯數組,可以正常工作,但已經創建的網站只是不在上,這是在同一個腳本中創建的... – Rakward 2010-08-31 06:36:54

+0

我懷疑這裏有一些索引。嘗試開啓SQL日誌記錄(參考http://www.magentocommerce。com/boards/viewreply/77655 /)在創建網站後捕獲任何索引或其他活動,然後追蹤負責該代碼的代碼,並將其複製到代碼中。 – 2010-08-31 06:41:39

回答

5

你沒有提及你的Magento版本。我已經在1.4.1.1上測試了下面的內容,並做了一些修改,因此它是一個正在運行的示例。

的主要區別是

Mage::app()->reinitStores(); 

Mage::app()->getConfig()->reinit(); 

其重新加載配置,同時重新加載緩存的變化。

完整的例子:

<?php 

require_once 'app' . DIRECTORY_SEPARATOR . 'Mage.php'; 
Mage::app(); 

/* Website information */ 
$website_data = array(
    'name' => 'Website Name', 
    'code' => 'website_company', 
    'sort_order' => '2', 
    'is_active' => 1, 
); 

/* Save website */ 
$website = Mage::getModel('core/website'); 
$website->setData($website_data); 
$website->save()->load(); 

/* Save store */ 
$storeGroup = Mage::getModel('core/store_group'); 
$storeGroup->setData(
     array(
      'root_category_id' => '3', 
      'website_id' => $website->getId(), 
      'name' => 'Store', 
     ) 
); 
$storeGroup->save()->load(); 

$store = Mage::getModel('core/store'); 
$store->setData(
     array(
      'website_id' => $website->getId(), 
      'name' => $storeGroup->getName(), 
      'code' => 'store_' . $website->load()->getId(), 
      'group_id' => $storeGroup->getGroupId(), 
      'is_active' => 1, 
     ) 
); 
$store->save()->load(); 

/* Re-init */ 
Mage::app()->getConfig()->reinit(); 

/* Config data array example */ 
$data = array('name' => 'Company 1', 'phone' => '056 22 33 61'); 

/* Set config values in array */ 
$groups = array(); 
foreach ($data as $key => $value) { 
    $groups['store_information']['fields'][$key]['value'] = $value; 
} 

/* Save config values */ 
$data = Mage::getModel('adminhtml/config_data') 
       ->setSection('general') 
       ->setWebsite($website->getCode()) 
       ->setGroups($groups) 
       ->save(); 
+0

你能告訴我如何以編程方式爲商店設置安全和不安全的基礎鏈接url嗎? – 2012-12-07 11:28:48

7

您應該使用安裝/升級腳本用於此目的(這是腳本內模塊SQL文件夾)。您甚至可能希望創建一個特定於設置的模塊,並在其中運行這些模塊。

只需在模塊的全局/資源節點中聲明一個設置資源,然後創建需要完成的文件。使用Mage_Core_Model_Resource_Setup或者讓你的設置類從那裏延伸。

Mage_Core_Model_Resource_Setup :: setConfigData()Mage_Core_Model_Resource_Setup :: deleteConfigData()

Mage_Core_Model_Resource_Setup :: addConfigField()也可以使用,但不能在覈心中實現我所知道的。

<?xml version="1.0" ?> 
<!-- module config.xml --> 
<config> 
    <modules> 
     <Your_Module> 
      <version>1.0</version> 
      <!-- upgrade script #s evaluated with version_compare(), FYI --> 
     </Your_Module> 
    </modules> 
    <global> 
     <resources> 
      <unique_node> 
       <setup> 
        <!-- match node under <modules> --> 
        <module>Your_Module</module> 
        <class>Mage_Core_Model_Resource_Setup</class> 
       </setup> 
      </unique_node> 
     </resources> 
    </global> 
</config> 

然後在你安裝/升級腳本做到這一點:

<?php 

$installer = $this; 
/* @var $installer Mage_Core_Model_Resource_Setup */ //or whatever you configured 

$installer->startSetup(); 

$installer->setConfigData($path, $value, $scope='default', $scopeId=0) //inherit is not implemented 

$installer->endSetup(); 
+0

+1,完全是我的想法 – 2012-11-30 14:23:03