我正在使用这种方法,所以创建新类别:
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;
}
然而,它实际上不起作用。第一种方法可以很好地创建类别,但是在运行第二种方法后,我什至无法加载管理面板来显示类别。
我究竟做错了什么?
编辑:
我向第二种方法发送了错误的 ID。它似乎已正确填充数据库表 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;
}