1

我想使用以下代码删除空类别:

`<?php
require "app/Mage.php";
umask(0);
Mage::app();
$categoryCollection = Mage::getModel('catalog/category')->getCollection()->addFieldToFilter('level',  array('gteq' => 2));
foreach($categoryCollection as $category) {
    if ($category->getProductCount() === 0) {
                               print_r ($category);
                           echo "<br><hr><br>";
        $category->delete();
    }
}
echo 'End!';
?>`

执行此代码后,它会在删除时崩溃。

print_r 给出以下结果:

Mage_Catalog_Model_Category Object (
[_eventPrefix:protected] => catalog_category
[_eventObject:protected] => category
[_cacheTag:protected] => catalog_category
[_useFlatResource:protected] => 1
[_designAttributes:Mage_Catalog_Model_Category:private] => Array (
[0] => custom_design
[1] => custom_design_from
[2] => custom_design_to
[3] => page_layout
[4] => custom_layout_update
[5] => custom_apply_to_products
)
[_treeModel:protected] =>
[_defaultValues:protected] => Array (
)
[_storeValuesFlags:protected] => Array (
)
[_lockedAttributes:protected] => Array (
)
[_isDeleteable:protected] => 1
[_isReadonly:protected] =>
[_resourceName:protected] => catalog/category_flat
[_resource:protected] =>
[_resourceCollectionName:protected] => catalog/category_flat_collection
[_dataSaveAllowed:protected] => 1
[_isObjectNew:protected] =>
[_data:protected] => Array (
[entity_id] => 53
[level] => 4
[path] => 1/2/27/39/53
[position] => 3
[is_active] => 1
[is_anchor] => 1
[product_count] => 0
)
[_hasDataChanges:protected] => 1
[_origData:protected] => Array (
[entity_id] => 53
[level] => 4
[path] => 1/2/27/39/53
[position] => 3
[is_active] => 1
[is_anchor] => 1
)
[_idFieldName:protected] => entity_id
[_isDeleted:protected] =>
[_oldFieldsMap:protected] => Array (
)
[_syncFieldsMap:protected] => Array (
)
)

我做错了什么,我该怎么做?

任何帮助将不胜感激。

4

1 回答 1

2
<?php 
  require "app/Mage.php";
  umask(0);
  Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));
  $categoryCollection = Mage::getModel('catalog/category')->getCollection()->addFieldToFilter('level',  array('gteq' => 2));
foreach($categoryCollection as $category) {
   if ($category->getProductCount() === 0) {
       print_r ($category->entity_id);
       echo "<br><hr><br>";
       $category->delete();
    }
}
echo 'End!';
?>

您必须添加此行

Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));

你写这段代码 print_r ($category); 所以它重新运行数组。那不是错误。

于 2013-08-23T09:19:12.553 回答