5

私はこの方法を使用しているので、新しいカテゴリを作成します:

private function createCat($name){
    $category = Mage::getModel( 'catalog/category' );
    $category->setStoreId( 0 );
    $category->setName( $name ); // The name of the category
    $category->setUrlKey( strtolower($name) ); // The category's URL identifier
    $category->setIsActive( 1 ); // Is it enabled?
    $category->setIsAnchor( 0 );
    // Display mode can be 'PRODUCTS_AND_PAGE', 'PAGE', or 'PRODUCTS'
    $category->setDisplayMode( 'PRODUCTS' );
    $category->setPath( '1/3' ); // Important you get this right.
    $category->setPageTitle( $name );
    $category->save();

    return $category->getId();
}

Magento がカテゴリに割り当てた ID がわかったら、次のメソッドをループで呼び出して、各カテゴリに親カテゴリを割り当てます。

private function assignCat($id, $parent){

    $category = Mage::getModel( 'catalog/category' )->load($id);
    $category->setPath( '1/3/'.$parent.'/'.$id ); // Important you get this right.
    $category->save();
    return;
}

ただし、実際には機能しません。最初の方法はカテゴリを正常に作成しますが、2 番目の方法を実行した後、管理パネルを読み込んでカテゴリを表示することさえできません。

私は何を間違っていますか?

編集:

間違った ID を 2 番目のメソッドに送信していました。データベース テーブル catalog_category_entity が正しく入力されたように見えますが、現在、カテゴリは管理ビューに正しく表示されません。それらはまだルート カテゴリが親であるかのように表示され、データベースでは、新しい親は 0 の子を持っていると表示されます。行う必要のある何らかの索引付けはありますか?

編集:解決策:

私はその間に解決策を見つけることができました。親カテゴリを変更するには、組み込みのカテゴリ move() メソッドを使用して、カテゴリをその下に移動する必要がありました。

private function assignCat($id, $parent){
    $category = Mage::getModel( 'catalog/category' )->load($id);
    Mage::unregister('category');
    Mage::unregister('current_category');
    Mage::register('category', $category);
    Mage::register('current_category', $category);
    $category->move($parent);
    return;
}
4

1 に答える 1

1

あなたはただ使うことができますsetParentId()

$category->setParentId($parentCategoryId);

別の方法として、Category Api モデルを使用してカテゴリを作成することもできます。

$categoryData = array(
    'name'        => $name,
    'url_key'     => $urlKey,
    'is_active'   => '1',
);

$categoryApi = Mage::getModel('catalog/category_api_v2');
$categoryId = $categoryApi->create($parentCategoryId, $categoryData, $store)
于 2015-02-04T21:48:32.817 に答える