2010-10-21 26 views
5

Bir kategoriyi tüm alt kategorilerle başka bir kategoriye nasıl taşırım? Aşağıdaki çözüm denediMagento - Programlı bir kategoriyi taşıyın

:

$nodeId = 2269; 
$parentId = 2268; 

$tree = Mage::getResourceModel('catalog/category_tree')->load(); 
$node = $tree->getNodeById($nodeId); 
$parentNode = $tree->getNodeById($parentId); 

$parentChildren = explode(',', $parentNode->getChildren()); 
$afterId = array_pop($parentChildren); 
$prevNode = $tree->getNodeById($afterId); 
if (!$prevNode || !$prevNode->getId()) { 
    $prevNode = null; 
} 

$tree->move($node, $parentNode, $prevNode); 

benim sonuç biraz bükülmüş olduğu Bununla. Kök kategoriye geçersem, hareket çalışır, ancak bir çocuk kategorisine geçersem hatalı sonuçlar alır ve kategorileri kaybederim. bu bir pisliği yolları değil,

Old: 1/2/3/2175/2269 
New: 1/2/3/2175/2226/2268/2269 
Correct: 1/2/3/2226/2268/2269 

cevap

16

Çözüm oldukça basitti:

Bunlar

veritabanında alan yolunun değerleridir. Ancak bu yöntem daha yavaş gibi geliyor.

$categoryId = 2269; 
$parentId = 2268; 

$category = Mage::getModel('catalog/category')->load($categoryId); 
$category->move($parentId, null); 
+0

Ben geçmesi ve yeni URL'ye tüm eski ürünlerini yönlendirmek için sahip olduğu için bu yöntem daha yavaş olduğuna inanıyoruz. –

1
$parent = Mage::getModel('catalog/category')->load('REPLACE_WITH_PARENT_ID'); 
$category = Mage::getModel('catalog/category'); 
$category->addData(array('name' => 'YOUR_CATEGORY_NAME', 'path' => $parent->getPath())); 
$category->save();