我使用下面的代码循环遍历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();
任何人都可以建议我可以添加到此循环的正确代码,以查找仅禁用产品的类别。
我不使用扁平产品或类别结构。
答案 0 :(得分: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();
}
}