2013-08-23 2 views
1

Я хочу удалить пустые категории, используя следующий код:Удаление категорий в Magento

`<?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 (
) 
) 

Что я делаю не так, и как я должен это делать?

Любая помощь была бы принята с благодарностью.

ответ

1
<?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 ($ категории); поэтому он повторно запускает массив. Это не ошибка.

Смежные вопросы