1

Magento の製品リストを繰り返し処理しています。新しいカテゴリ ID を割り当てますsetCategoryIds()が、古い割り当ては削除されません。製品 A がカテゴリ X にあるように、A がカテゴリ Y と Z にあり、X の外にある必要があります。

SOAP API を使用せずにプログラムで削除する方法は?

4

2 に答える 2

2

実際にsetCategoryIdsは、以前のカテゴリが設定されていない場合は、すべてリセットする必要があります。テスト用のテスト シェル スクリプト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 に答える