2012-06-15 10 views
5

Sto usando questo metodo in modo creare nuove categorie:Magento - Come impostare un nuovo genitore per una categoria in modo programmato?

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

Dopo lo so l'ID che Magento ha assegnato alla categoria, ho quindi chiamare il seguente metodo in un ciclo di assegnare ad ogni categoria di una categoria principale:

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

Tuttavia non funziona. Il primo metodo crea le categorie fini, ma dopo aver eseguito il secondo metodo, non riesco nemmeno a caricare il pannello di amministrazione per mostrare le categorie.

Cosa sto sbagliando?

EDIT:

inviavo l'id sbagliato per il secondo metodo. Sembra che sia stata compilata correttamente la tabella del database catalog_category_entity, ma ora le categorie non vengono visualizzate correttamente nella vista di amministrazione. Stanno ancora mostrando come se la categoria radice fosse il genitore e nel database, il nuovo genitore mostrasse di avere 0 figli. Esiste qualche tipo di indicizzazione che deve essere eseguita?

EDIT: SOLUZIONE:

sono riuscito a trovare una soluzione nel frattempo. Per cambiare la categoria principale, avevo bisogno di spostare la categoria sotto di essa utilizzando la funzione integrata nella categoria metodo 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

È necessario pubblicare la soluzione come risposta – Benubird

risposta

1

Si può semplicemente utilizzare setParentId():

$category->setParentId($parentCategoryId); 

In alternativa è possibile utilizzare la Categoria Api Modello per creare la categoria:

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

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