1

ストア、ストア ビュー、および Web サイトの作成に関して小さな問題があります。顧客登録簿にストアを作成します (1 人の顧客には 1 つの Web サイト、1 つのストア ビューと 1 つのストアがあります)。すべて問題ありませんが、たとえばストア ビュー、DB の他の要素の保存でエラーが発生した場合。

コード:

// 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が必要なので、これを行う方法がわかりません。

4

1 に答える 1

2

わかりました、自分で解決しました

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();
}
于 2013-03-19T09:56:14.590 に答える