以编程方式将Magento产品添加到类别中

rob*_*bgt 19 magento categories

我正在使用Magento 1.4.0.1.我有超过21000个简单的产品,每个产品都进入一个类别.我的网站有数百个类别.某些产品属于多个类别.我有什么方法可以以编程方式将产品添加到多个类别中吗?

Jos*_*ton 54

在PHP代码中,您可以在导入它们时将它们放入类别中.

假设您有一个名为$ product的产品和一个名为$ category_id的类别ID

您可以通过执行以下操作来设置产品所属的类别

$categories = array($category_id);
$product->setCategoryIds($categories);
$product->save();
Run Code Online (Sandbox Code Playgroud)

如果产品已经有类别,并且您想再添加一个类别,那么您可以getCategoryIds()像这样使用:

$categories = $product->getCategoryIds();
$categories[] = $categoryId;
$product->setCategoryIds($categories);
$product->save();
Run Code Online (Sandbox Code Playgroud)

或者,正如Joshua Peck在评论中所提到的,您可以使用该category_api模型在类别中添加或删除产品,而不会影响其当前的类别分配:

Mage::getSingleton('catalog/category_api')
  ->assignProduct($category->getId(),$p??roduct->getId());

Mage::getSingleton('catalog/category_api')
  ->removeProduct($category->getId(),$p??roduct->getId());
Run Code Online (Sandbox Code Playgroud)

  • 我只想补充一点,您可以删除并添加getSingleton类别API:`Mage :: getSingleton('catalog/category_api') - > removeProduct($ category-> getId(),$ product-> getId());`和`Mage :: getSingleton('catalog/category_api') - > assignProduct($ category-> getId(),$ product-> getId());`这不会覆盖产品已经存在的任何类别. (13认同)
  • 这将覆盖该产品的指定类别.要添加到类别,您需要将$ product-> getCategoryIds()分配给变量,将ID添加到数组中,然后添加setCategoryIds(),然后保存. (3认同)
  • 然后你所要做的就是加载产品并执行setCategoryIds()函数并保存它.如果要执行多个类别,可以将多个category_id放入该数组中. (2认同)

Jos*_*ack 18

我只想补充一点,您可以删除并添加getSingleton类别API:

要从类别中删除产品:

Mage::getSingleton('catalog/category_api')->removeProduct($category->getId(),$p??roduct->getId());
Run Code Online (Sandbox Code Playgroud)

要将产品添加到类别:

Mage::getSingleton('catalog/category_api')->assignProduct($category->getId(),$p??roduct->getId());
Run Code Online (Sandbox Code Playgroud)

这不会覆盖产品已经存在的任何类别