2012-06-15 19 views
5

estoy usando este método por lo que crear nuevas categorías:Magento: cómo establecer programáticamente un nuevo padre para una categoría?

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

Después Sé el ID que Magento ha asignado a la categoría, que a continuación, invoca el método siguiente en un bucle para asignar a cada categoría de una categoría principal:

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

Sin embargo, en realidad no funciona. El primer método crea las categorías bien, pero después de ejecutar el segundo método, no puedo cargar el panel de administración para mostrar las categorías.

¿Qué estoy haciendo mal?

EDIT:

estaba enviando el id mal con el segundo método. Parece que ha llenado correctamente la tabla de la base de datos catalog_category_entity, pero ahora las categorías no se muestran correctamente en la vista administrativa. Todavía se muestran como si la categoría raíz fuera la principal y en la base de datos, el nuevo padre muestra tener 0 hijos. ¿Hay algún tipo de indexación que deba tener lugar?

EDIT: SOLUCIÓN:

he conseguido encontrar una solución en la media hora. Para cambiar la categoría padre, que tenía que mover la categoría en la que utilizando el construido en la categoría método 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

Debes publicar tu solución como respuesta – Benubird

Respuesta

1

Usted sólo puede utilizar setParentId():

$category->setParentId($parentCategoryId); 

Alternativamente, puede utilizar la Categoría Api Modelo para crear la categoría:

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

$categoryApi = Mage::getModel('catalog/category_api_v2'); 
$categoryId = $categoryApi->create($parentCategoryId, $categoryData, $store) 
Cuestiones relacionadas