Magento将产品分类为类别

时间:2012-05-09 20:00:03

标签: magento categories product mass-assignment

正如标题所说,我需要将产品批量分配到一个类别,而从管理员我只能一次编辑一个产品;我不知道为什么它不能从类别页面的“类别产品”选项卡中大量添加它们。
这就是为什么我需要另一种快速的方法,比如使用phpMyAdmin或类似的东西。

任何帮助?

提前致谢!

4 个答案:

答案 0 :(得分:10)

我创建了一个简单的脚本来在Magento之外执行此操作。请务必先在单个产品上进行测试,并确保它看起来像您期望的那样。

// Load Magento
require_once 'path/to/app/Mage.php';
Mage::app();

// $productIds is an array of the products you want to modify.
// Create it however you want, I did it like this...
$productsIds = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToFilter('sku', array('like' => 'something'))
    ->getAllIds();

// Array of category_ids to add.
$newCategories = array(20);
foreach ($productIds as $id) {
    $product = Mage::getModel('catalog/product')->load($id);
    $product->setCategoryIds(
        array_merge($product->getCategoryIds(), $newCategories)
    );
    $product->save();
}

如果您要覆盖产品的现有类别,请将array_merge(...)更改为$newCategories

答案 1 :(得分:6)

我会回避从数据库方面解决这个问题。如果你朝那个方向前进,请确保并进行大量备份,并在低使用率时进行。

following thread on the Magento forum识别出同样的问题。一张海报通过示例推荐了一个原始的sql方法。再次,我会小心 - 确保你做备份。

我最喜欢的帖子(由Magento MVP发布):

  

进入您不想要的类别,找到产品列表。   单击要删除的产品上的复选框,然后选择   从小下拉列表中删除。

     

现在进入您所在的类别   想要它们,请转到产品列表。选择NO下拉列表   显示不属于该类别的项目。你可能需要做一个选择性的   搜索以限制内容并在几次迭代中执行。点击   复选框并告诉它添加内容。

答案 2 :(得分:2)

您也可以使用magento API执行此操作 这是我用于批量添加产品的脚本。 sku.txt每行包含一个sku。

<?php
$wsdlUrl = "magento-root/index.php/api/soap/?wsdl";
$proxy = new SoapClient($wsdlUrl);
$sessionId = $proxy->login('apiuser', 'apipasswd');


$listOfDiscountedSKUFile = "sku.txt";


function readinFile($filePath)
{
    $fp = fopen($filePath,'r') or exit("Unable to open file!");
    $dataItems = array();
    while(!feof($fp))
    {
        $dataItems[] = trim(fgets($fp));
    }
    fclose($fp);
    var_dump($dataItems);
    return $dataItems;
}

function addToCategory($sku,$categoryId)
{
    global $proxy,$sessionId;
    $proxy->call($sessionId, 'category.assignProduct', array($categoryId, $sku));
}

function IsNullOrEmptyString($question){
        return (!isset($question) || trim($question)==='');
}
$categoryId = 82;//e.g.
$listOfSKU = readinFile($listOfDiscountedSKUFile);
foreach($listOfSKU as $sku)
{
    addToCategory($sku,$category);
}

?>

答案 3 :(得分:1)

我设法用以下代码解决了这个问题:
    

$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$x = 1171;
$y = 2000;
$categoryID = 4;
$productPosition = 0;
while($x <= $y) {
$write->query("REPLACE INTO `catalog_category_product` (`category_id`, `product_id`,  `position`) VALUES ($categoryID, $x++, $productPosition)");
}
echo "The job is done";
?>

我希望代码对每个人都清楚,如果不是,请回复,我会尝试解释它。

@nachito:这是。