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 に答える