在单个产品上导入多个类别

Importing multiple categories on single products

我的问题是在导入数据时获取正确的菜单结构。

我使用 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 个主要类别和子类别,因此手动创建它们根本行不通。

欢迎提出想法、问题或意见! :)

您必须以编程方式创建这些类别,不能通过导入(也许通过 magmi 但我不知道)。将脚本放入您的 magento 根目录并 运行 它。这是您可以继续的方式(需要完善):

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

麦格米'on-the-fly category importer'一定会为您做到这一点。我建议您非常非常仔细地阅读 MAGMI wiki 上的说明:那里有您需要的所有信息,但我经常发现我必须 double-check 和 re-read MAGMI wiki 上的详细信息和示例。

MAGMI 下载安装说明 运行 : http://wiki.magmi.org/index.php?title=Main_Page#Download_and_Install_Magmi

on-the-fly 类别进口商的 MAGMI 说明:http://wiki.magmi.org/index.php?title=On_the_fly_category_creator/importer

如果您之前没有使用过 MAGMI,那么从一个简单的 CSV 开始,以确保您的安装设置正确,并且您能够导入一个创建简单产品的 csv。

我认为您面临的主要挑战是将问题中描述的 CSV 文件格式转换为 MAGMI 可以使用的 CSV 格式。或者,您可以在 MAGMI 中编写代码来转换 CSV 数据,但我认为如果这是一个 one-off 过程,那可能会过于复杂。

我不确定我是否遵循了您的 CSV 示例的语法,但如果第一个字符串始终是顶级类别,然后竖线符号表示 'subcategory follows',那么对于

"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_activeis_anchorinclude_in_menu,可以省略。

这是 none 我的事,但我对子类别标签 'Tools for alupex' 中的两个空格深感担忧(不要在 lower-case Alupex 或 AluPEX 上开始我)