Magento:将所有产品分配到默认类别

时间:2014-12-05 16:26:04

标签: php mysql magento

如何将我的所有产品分配到默认类别?

我不会丢失指定的实际类别,但我会添加默认类别。

通过这种方式,具有类别1的PRODUCT A也将具有分配的任何类别的默认类别和PRODUCT B将仅具有Dafault类别。

由于

2 个答案:

答案 0 :(得分:1)

您可以使用此自定义脚本执行此操作:

<?php
require_once 'app/Mage.php';
Mage::app();
$default_category_id = [your default category id];
$db = Mage::getSingleton('core/resource')->getConnection('core_read');
$sql = "SELECT product_id FROM catalog_category_product WHERE category_id != ?";
$pIds = $db->fetchAll($sql, array($default_category_id));
foreach($pIds as $pid) {
   $sql = "INSERT INTO catalog_category_product (category_id, product_id, position) VALUES (?,?,1)";
   $db->query($sql, array($default_category_id, $pid));
}
?>

希望它会对你有所帮助。

答案 1 :(得分:1)

当您可以使用现有模型时,我总是尽量避免运行直接SQL查询。我就是这样做的:

<?php
require_once 'app/Mage.php';
Mage::app();

$collection = Mage::getModel('catalog/product')->getCollection()
->addStoreFilter($store_id) // Or use the default Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID 
->addAttributeToSelect('*'); 
// You may need to specify a limit if you have too many products with: ->setPageSize(NUMBER_OF_PRODUCTS)

$newCategories = array(12345); // Put as much categories as you want to add

foreach ($collection as $product) {
    // array_merge: To keep the existing ids
    // array_unique: to avoid assigning the same category twice
    $product->setCategoryIds(
    array_unique(array_merge($product->getCategoryIds(), $newCategories))
    );
    $product->save();
}

您可能需要在之后重新编制索引(如果您在重新索引设置中禁用了保存更新),以使更改生效。