2013-03-18 39 views
1

我有關於存儲,存儲視圖和網站創建的小問題。我在客戶註冊表上創建商店(一個客戶有一個網站,一個商店視圖和一個商店),一切正常,但是當存儲示例商店視圖時存在錯誤時,DB中的其他元素。Magento:存儲,存儲視圖,交易網站

代碼:

// Root Category 
$category = new Mage_Catalog_Model_Category(); 
$category->setStoreId(0); 
$category->save(); 

// Website 
$website = new Mage_Core_Model_Website(); 
$website->setData(array(
    'code' => $codes, 
    'sort_order' => 10 
))->save(); 

// Create store group (store view) 
$storeGroup = new Mage_Core_Model_Store_Group(); 
$storeGroup->setData(array(
    'website_id' => $website->getId(), 
    'root_category_id' => $category->getId() 
))->save(); 

// Create store 
$store = new Mage_Core_Model_Store(); 
$store->setData(array(
    'code' => $codes, 
    'website_id' => $website->getId(), 
    'group_id' => $storeGroup->getId(), 
)); 
$store->save(); 

我需要修改代碼,使這個事情會在交​​易創建和回滾,如果有一個錯誤。我不知道該怎麼做,因爲每次保存對象後我都需要一個id。

回答

2

OK,解決了自己

try { 
    $write = Mage::getSingleton('core/resource')->getConnection('core_write'); 
    $write->beginTransaction(); 

    $category = Mage::getModel('catalog/category') 
        ->setStoreId(0) 
        ->setName($code) 
        ->setParentId(Mage_Catalog_Model_Category::TREE_ROOT_ID) 
        ->setPath(Mage_Catalog_Model_Category::TREE_ROOT_ID) 
        ->setDisplayMode(Mage_Catalog_Model_Category::DM_PRODUCT) 
        ->setIsActive(TRUE) 
        ->setId(NULL) 
        ->save(); 
    $website = Mage::getModel('core/website') 
        ->setCode($code) 
        ->setName($code) 
        ->setSortOrder(10) 
        ->setId(NULL) 
        ->save(); 
    $storegr = Mage::getModel('core/store_group') 
        ->setWebsiteId($website->getId()) 
        ->setName($code) 
        ->setRootCategoryId($category->getId()) 
        ->setId(NULL) 
        ->save(); 
    $store = Mage::getModel('core/store') 
       ->setCode('1'.$code) 
       ->setWebsiteId($website->getId()) 
       ->setGroupId($storegr->getId()) 
       ->setName($code) 
       ->setSortOrder(10) 
       ->setIsActive(TRUE) 
       ->setId(NULL) 
       ->save(); 
    $write->commit(); 
} catch (Exception $e) { 
    $write->rollback(); 
} 
+0

無需標記問題的解決手動 - 只是獎勵自己一個剔旁邊的答案':)'。 +1 – halfer 2013-03-19 10:00:21

+0

感謝您的提示:-) – KesavCZ 2013-03-19 10:02:53