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

时间:2016-01-06 13:53:12

标签: magento menu submenu magmi data-formats

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

我使用的是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个主要和子类别,所以手动创建它们根本不会工作。

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

2 个答案:

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

这不关我的事,但我对子类别标签'Tools for alupex'中的两个空格深感担忧(不要在小写字母Alupex或AluPEX上启动我)