1

我正在遍历 Magento 中的产品列表。我确实分配了新的类别 ID,setCategoryIds()但不会删除旧的分配。就像产品 A 属于 X 类一样。现在我想要 A 属于 Y 类和 Z 类,并且不在 X 中。我做了一个 setCategoryIds(Y,Z),现在产品在 X、Y 和 Z 中。

如何在不使用 SOAP API 的情况下以编程方式删除它?

4

2 回答 2

2

实际上,setCategoryIds应该重置所有以前的类别,如果它们不在设置的类别中。我创建了一个测试 shell 脚本test.php来测试它:

<?php
require_once 'abstract.php';

/**
 * Magento Test Assignment Script
 *
 * @category    Mage
 * @package     Mage_Shell
 */
class Mage_Shell_Test extends Mage_Shell_Abstract
{
    /**
     * Run script
     *
     */
    public function run()
    {
        $productId = $this->getArg('product');
        $catIdsString = $this->getArg('categories');
        $catIds = explode(',', $catIdsString);
        /** @var $product Mage_Catalog_Model_Product */
        $product = Mage::getModel('catalog/product')->load($productId);
        $product->setCategoryIds($catIds);
        $product->save();
        print_r($product->getCategoryIds());
    }

    /**
     * Retrieve Usage Help Message
     *
     */
    public function usageHelp()
    {
        return <<<USAGE
Usage:  php -f test.php -- [options]
        php -f test.php -- --product 1 --categories 3,4

  --product <product>       Product Id
  --categories <categories> Categories to assign, comma separated
  help                      This help

USAGE;
    }
}

$shell = new Mage_Shell_Test();
$shell->run();

您可以将其插入您的shell文件夹并尝试运行关联。

于 2012-10-05T09:13:41.327 回答
0

试试这个:

$proxy = new SoapClient('http://magentohost/api/soap/?wsdl');
$sessionId = $proxy->login('apiUser', 'apiKey');

$categoryId = 5; // Put here your category id
$storeId = 1; // You can add store level

$assignedProducts = $proxy->call($sessionId, 'category.assignedProducts', array($categoryId, $storeId));
var_dump($assignedProducts); // Will output assigned products.

// Assign product
$proxy->call($sessionId, 'category.assignProduct', array($categoryId, 'someProductSku', 5));

// Update product assignment postion
$proxy->call($sessionId, 'category.updateProduct', array($categoryId, 'someProductSku', 25));

// Remove product assignment
$proxy->call($sessionId, 'category.removeProduct', array($categoryId, 'someProductSku'));

按照这个链接:看这里

于 2012-10-05T08:30:25.500 回答