我正在寫一個模塊,將從一個Magento實例中提取對象,如網站,組,類別和產品,序列化它們的屬性並將所有內容寫入文本文件,序列化和在另一臺服務器上。然後使用這些屬性以編程方式在新服務器上重新創建這些對象。我們的想法是,我們將能夠提取組成Magento網上商店的所有對象,並將它們移動到另一臺服務器。 (不,我們不希望將整個實例移動到另一臺服務器,我們只是希望能夠移動一個商店及其相關對象)。Magento:正確的方法來創建類別對象
顯然,由於我們在新服務器上創建類別,因此它們entity_id將會改變。我已經完成了這部分工作,並確保子類別具有正確的父級ID。直到我嘗試重新創建類別和子類別對象時,該項目一直很直接。我遇到各種各樣的問題。新的類別對象保存數據庫。但是,有時它們不會顯示在類別樹中,有時它們的parent_id會更改爲0,有時整個類別樹會消失。我一直在爲此工作大約一週。我已經讀過,您必須在保存之前將「路徑」屬性設置爲父路徑。我已經讀過,你必須使用「移動」方法將類別設置爲其父項的子項。有很多理論,但沒有人似乎有答案。
所以我的問題:你如何創建實際工作的類別和子類別記錄,是否正確鏈接到他們的父類別,在類別樹中顯示,並且不要啄住事物?我從存儲在名爲$ aryData()的數組中的原始源類別中獲得以下屬性。
[entity_id] => 127 //This usually changes on new server
[parent_id] => 1 //Lookup NEW entity_id of parent and use it
[path] => //Not sure how to properly set this. Tried a few things
[position] => 8 //Leave this alone, hope for the best
[children_count] => 0 //Have to zero this out when you create new category object
[name] => Best Test
[url_key] => best-test
[is_active] => 1
[include_in_menu] => 1
這裏一般是我在做什麼,以簡化的方式:
$objNewCat = Mage::getModel('catalog/category'); //Create new object to populate
$parent_id = getNewParent($data['name'], $data['url-key']; //Get new parent id by name and URL key. (This works)
$objParentCat = Mage::getModel('catalog/category')->load($parent_id);
$aryData(['parent_id']) = $parent_id; //Update parent ID in data array
$aryData(['children_count']) = 0; //Must set to 0. Updated as children are added
$objNewCat->setData($data); //Set all data parameters from our save array
$objNewCat->setPath($objParentCat->getPath()); //Is this correct? Read you have to do this
$objNewCat->save(); //Save object to populate entity_id field
//--- Now assign object to be child of the parent.
$objCat = Mage::getModel('catalog/category')->load($newCat->getId()); //reloading to set 'current category'
Mage::unregister('category');
Mage::unregister('current_category');
Mage::register('category', $objCat);
Mage::register('current_category', $objCat);
$objCat->move($parent_id);
$objCat->save();
是,一些這段代碼是那種粗糙。這是一個簡化的,我一直在嘗試很多事情來實現它的工作。這非常令人沮喪。幫助我Obi-Wan Knobi。你我唯一的希望。