我的问题是在导入数据时获得正确的菜单结构。
我使用的是Magento 1.9.2.2
我以CSV格式收到我的数据:
"sku","Cat1","Cat2","Cat3","Cat4"
"001","Plumbing","Pressfittings & pipes","Unipipe - MLC","Clutch"
"002","Tools","Handtools|Pipetools","Pipetools|Pipecutters & Scissors","Plastic scissors"
"003","Tools|Plumbing","Handtools|Pipetools|Pipes & Fittings","Pipetools|Calibration|Alupex fittings & tubes","Calibration tools|Tools for alupex"
我做了一个小程序去掉“|”接下来是什么,所以:
"002","Tools","Handtools|Pipetools","Pipetools|Pipecutters & Scissors","Plastic scissors"
变为:
"002","Tools","Handtools","Pipetools","Plastic scissors"
但是我想创建所有底层类别,所以我也为sku 002得到了这个:
"002","Tools","Pipetools","Pipecutters & Scissors","Plastic scissors"
我相信Magento以某种方式使用了该结构,但我很难搞清楚如何导入它。
我在手动创建类别后尝试了Magento的正常导入,但这不起作用。 我也尝试用Magmi创建它们,但我不能让Magmi使用多个主要和子类别。
有没有人看过这种数据格式并且在正确的方向上有一个线索,关于如何将它导入菜单结构?
我有2500个主要和子类别,所以手动创建它们根本不会工作。
欢迎提出想法,问题或意见! :)
答案 0 :(得分:0)
你必须以编程方式创建这些类别,而不是通过导入(可能通过magmi,但我不知道)。将脚本放入magento root并运行它。这就是你如何进行(需要抛光):
$category = Mage::getModel('catalog/category');
$f = fopen($file, "r");
$row = 0;
while ( ($data = fgetcsv( $f, 0, ",") ) !== FALSE) {
$multiple_categories = explode("|", $data);
//save main ones
$category->setName($multiple_categories[0])
->setIsActive(1)
->setDisplayMode('PRODUCTS')
->setIsAnchor(1)
->setAttributeSetId($category->getDefaultAttributeSetId()); //or the id of your attribute set, this is important.
$category->save();
unset($category);
//now deal with children
if(count($multiple_categories) > 1){
i = 1;
foreach($multiple_categories as $subcategory){
$category->setName($multiple_categories[i])
->setIsActive(1)
->setDisplayMode('PRODUCTS')
->setIsAnchor(1)
->setAttributeSetId($category->getDefaultAttributeSetId());
//manage parents now
$_category = Mage::getResourceModel('catalog/category_collection')
->addFieldToFilter('name', $multiple_categories[i-1])
->getFirstItem(); //this needs more work
$parentId = $_category->getId();
$parentCategory = Mage::getModel('catalog/category')->load($parentId);
$category->setPath($parentCategory->getPath());
$category->save();
unset($category);
i++;
}
}
$row++;
}
答案 1 :(得分:0)
MAGMI'动态类别导入器'肯定会为你做这件事。我建议你仔细阅读MAGMI维基上的说明:你需要的所有信息都在那里,但我经常发现我必须仔细检查并重新阅读MAGMI维基上的细节和例子。
下载安装和运行的MAGMI说明:http://wiki.magmi.org/index.php?title=Main_Page#Download_and_Install_Magmi
动态类别导入程序的MAGMI说明:http://wiki.magmi.org/index.php?title=On_the_fly_category_creator/importer
如果您之前没有使用过MAGMI,那么请使用简单的CSV开始,以确保您的安装设置正确,并且您可以导入创建简单产品的csv。
我认为您面临的主要挑战是将问题中描述的CSV文件格式转换为MAGMI可以使用的CSV格式。或者,您可以在MAGMI中编写代码来转换CSV数据,但如果这是一次性过程,我认为这可能过于复杂。
我不确定我是否遵循CSV示例的语法,但如果第一个字符串始终是顶级类别,则管道符号表示'子类别跟随'
"003","Tools|Plumbing","Handtools|Pipetools|Pipes & Fittings","Pipetools|Calibration|Alupex fittings & tubes","Calibration tools|Tools for alupex"
你试图制作像这样的MAGMI CSV
"sku","categories"
"003","Tools::1::1::1/Plumbing::1::0::1;;Handtools::1::1::1/Pipetools::1::0::1/Pipes & Fittings::1::0::1;;Pipetools::1::1::1/Calibration::1::0::1/Alupex fittings & tubes::1::0::1;;Calibration tools::1::1::1/Tools for alupex::1::0::1"
晦涩的::1::1::1
分别表示is_active
,is_anchor
和include_in_menu
,可以省略。
这不关我的事,但我对子类别标签'Tools for alupex'
中的两个空格深感担忧(不要在小写字母Alupex或AluPEX上启动我)