2012-06-15 32 views
5

Tôi đang sử dụng phương pháp này để tạo các danh mục mới:Magento - Làm thế nào để lập trình một phụ huynh mới cho một thể loại?

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

Sau khi tôi biết ID mà Magento đã gán cho thể loại, tôi sau đó gọi phương thức sau đây trong một vòng lặp để gán từng loại một chủ đề chính:

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

Tuy nhiên, nó không thực sự hoạt động. Phương pháp đầu tiên tạo ra các loại tốt, nhưng sau khi chạy phương pháp thứ hai, tôi thậm chí không thể tải bảng quản trị để hiển thị các loại.

Tôi đang làm gì sai?

EDIT:

Tôi đã gửi sai id đến phương pháp thứ hai. Có vẻ như đã điền vào bảng cơ sở dữ liệu catalog_category_entity một cách chính xác, nhưng bây giờ các danh mục không hiển thị chính xác trong khung nhìn quản trị viên. Họ vẫn đang hiển thị như thể loại gốc là cha mẹ và trong cơ sở dữ liệu, cha mẹ mới đang hiển thị là có 0 con. Có một số loại chỉ mục cần phải diễn ra không?

CHỈNH SỬA: GIẢI PHÁP:

Tôi đã tìm được giải pháp trong thời gian chờ đợi. Để thay đổi chủ đề chính, tôi cần phải di chuyển các mục dưới nó bằng cách sử dụng được xây dựng trong thể loại move() phương pháp:

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

Bạn nên đăng giải pháp của mình làm câu trả lời – Benubird

Trả lời

1

Bạn chỉ có thể sử dụng setParentId():

$category->setParentId($parentCategoryId); 

Hoặc bạn có thể sử dụng các loại Mô hình Api để tạo danh mục:

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

$categoryApi = Mage::getModel('catalog/category_api_v2'); 
$categoryId = $categoryApi->create($parentCategoryId, $categoryData, $store) 
Các vấn đề liên quan