1

我正在使用下面的代码循环遍历 Magento (CE 1.7.2) 中的所有“底层”类别,以查找(并可选择删除)空类别。

<?php
require_once $_SERVER['DOCUMENT_ROOT']."/app/Mage.php";
Mage::app('admin');

$categoryCollection = Mage::getModel('catalog/category')->getCollection()
   ->addFieldToFilter('level', array('gteq' => 5))
   ->addAttributeToSelect('name')
;

foreach($categoryCollection as $category) {
   if ($category->getProductCount() === 0) {
       print "delete ".$category['name']. "<br>" ;
       //$category->delete();
   }
}
?>

我想修改代码以也或替代地查找仅包含禁用产品的类别。

我尝试了以下操作,但它运行了 5 分钟然后超时 - 我怀疑它没有做我认为应该做的事情。

foreach($categoryCollection as $category)
{
$products = Mage::getModel('catalog/category')->load($category)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(
    'status',
    array('eq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED)
);
    $count = $products->getSize();

谁能建议我可以添加到此循环中以查找仅包含禁用产品的类别的正确代码。

我没有使用扁平的产品或类别结构。

4

1 回答 1

0

我找到了解决方案。

由于某种原因 Mage_Catalog_Model_Product_Status::STATUS_DISABLED 不起作用 - 但是, STATUS_ENABLED 起作用。因此,通过计算每个类别启用了多少产品,如果计数为 0,我知道猫要么是空的,要么只有禁用的产品。

require_once $_SERVER['DOCUMENT_ROOT']."/app/Mage.php";
Mage::app('admin');

$categoryCollection = Mage::getModel('catalog/category')->getCollection()
   ->addFieldToFilter('level', array('gteq' => 5))
   ->addAttributeToSelect('name')
;
foreach($categoryCollection as $category)
{


$products = Mage::getModel('catalog/category')->load($category->getId())
->getProductCollection()
->addAttributeToSelect('*') //whatever attributes you want to get here
->addAttributeToFilter(
    'status',
    array('eq' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED)            
);

$count = $products->getSize();

   if ($count == 0) {
       print "delete". $category['name'] ."<br>" ;        
       $category->delete();  
    }
}
于 2013-09-12T11:43:30.773 回答