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;
}
È necessario pubblicare la soluzione come risposta – Benubird